春天:autowired字段为空
问题描述:
我需要将外部lib类连接到我的bean,以便将它用作单例。
.XML配置:春天:autowired字段为空
<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才能使@Autowired正常工作。
<bean id="externalBean" class="some.external.package.ExternalBean">
</bean>
<bean id="myBean" class="com.my.MyBean">
</bean>
此外,如果您使用@Autowired,则不需要setter。
答
loodakrawa是正确的。第二件可能导致问题的情况是,您有一个用于myBean
的xml bean声明,并且附加注释了该bean的@Service
。我想这会在使用启用组件扫描后立即引起麻烦。
答
我认为,更好的IDE AIS使用上下文路径扫描:
<context:component-scan base-package="some.external.package">
</context:component-scan>
确保所有这些类的包内。然后用注解之一标记这两个类(@Repository, @Service, @Component
)。
其中一个好处,不需要setter。
P.S:如果您重新使用扫描库,则不需要将类声明为bean,注释已足够
+1。而且该属性元素是无用的,因为它是自动装配的。如果它不是自动装配的,它的值必须是ExternalBean引用,而不是String“com.ExternalBean”。 –
loodakrawa,您好,非常感谢您指出.Strange,但仍然无效。它为空。 – sergionni
@sergionni 很高兴帮助:) 由于各种原因,它仍然可能为空。基于相对有限的信息,我很难猜测。我建议你使用显式的依赖注入而不是自动装配,因为这样你就有了更大程度的控制。我建议阅读以下内容:http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-collaborators – loodakrawa