Spring:autowired字段为null

时间:2011-11-18 13:34:51

标签: java spring javabeans autowired

我需要将外部lib类连接到我的bean,以便将其用作单例 .xml config:

<bean id="myBean" class="com.my.MyBean">
 <property name="someLib" value="com.ExternalBean" />
</bean>

java bean:

@Service
public class MyBean {

    @Autowired
    private ExternalBean externalBean;


    public void setExternalBean(ExternalBean externalBean) {
        this.externalBean = externalBean;
    }

此外,我在公共方法中使用有线变量externalBean,以便不在每个方法调用中实例化它。 问题在于null

我是否正确连接bean?错误是什么。

3 个答案:

答案 0 :(得分:5)

您必须将外部类定义为bean才能使@Autowired工作。

<bean id="externalBean" class="some.external.package.ExternalBean">
</bean>

<bean id="myBean" class="com.my.MyBean">
</bean>

另外,如果您使用@Autowired,则不需要它的设置器。

答案 1 :(得分:1)

loodakrawa是对的。可能导致问题的第二件事是,你有一个myBean的xml bean声明,另外用@Service注释了bean。我想这会在使用启用组件扫描后立即引起麻烦。

答案 2 :(得分:1)

我认为更好的ide是使用上下文路径扫描:

<context:component-scan base-package="some.external.package">
</context:component-scan>

确保所有这些类都在包中。然后使用其中一个注释(@Repository, @Service, @Component)标记两个类。

其中一个好处,不需要制定人。

P.S:如果您使用扫描库,则不需要将类声明为bean,注释就足够了