3

我试图弄清楚如何将此java代码更改为spring

private MyObject myObject = MyObjectFactory.getService();

在我的 Foo.java 类中,我有

@Autowired
private MyObject myObject;

在spring 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

您尝试将一个类型的对象注入MyObjectFactory到 path.to.Foo 中,其中需要一个类型的对象MyObject。请像这样更改您的代码:

福:

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

我的对象工厂:

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 回答