3

このJavaコードをSpringに変更する方法を見つけようとしています

private MyObject myObject = MyObjectFactory.getService();

私のFoo.javaクラスでは

@Autowired
private MyObject myObject;

春のxmlには、次のものがあります。

<bean id="MyObject" class="path.to.MyObjectFactory" factory-method="getService"></bean>

<bean id="Foo" class="path.to.Foo">
    <property name="myObject" ref="MyObject"/>
</bean>

エラーは

No matching bean of type [path.to.MyObject] found for dependency: 
expected at least 1 bean which qualifies as autowire candidate for this dependency.
4

1 に答える 1

3

MyObjectFactorytypeのオブジェクトが期待される path.to.Foo に、type のオブジェクトを挿入しようとしましたMyObject。次のようにコードを変更してください。

フー:

public class Foo {
    private MyObject myObject;
    public void setMyObject(MyObject value) { myObject=value;}
}

MyObjectFactory:

public class MyObjectFactory {
    public MyObject getService() {
        return new MyObject();
    }
}

春のxml:

<bean class="MyObjectFactory" id="factory" />
<bean id="myObject" factory-bean="factory" factory-method="getService" scope="prototype" />

<bean id="Foo" class="path.to.Foo">
    <property name="myObject" ref="MyObject"/>
</bean>

ちなみに、あなたのケースでも同じこと@Autowired<property ...>表現するので、どちらかを省略できます。

アップデート:

春のファクトリービーンズの詳細については、こちらをご覧ください

シングルトンは必要ないと思ったので、追加しましscope="prototype"た。MyObjectのインスタンスがシングルトンであると思われる場合は、それを削除してください。

于 2012-11-14T07:52:30.840 に答える