我有两个组件A
和B
。 A
取决于B
。我写了类似的东西:
public class A {
private B b;
@Autowired
public void setB(B b) {
this.b = b;
}
}
@Component
public class B {}
new XmlBeanFactory(new FileSystemResource("./spring.xml")).getBean(A.class);
config
<context:annotation-config/>
<context:component-scan
base-package="com">
</context:component-scan>
<bean class="com.A" autowire="byType" />
效果很好。现在我也希望通过注释配置A
。所以我将@Component注释添加到A
@Component
public class A {
private B b;
@Autowired
public void setB(B b) {
this.b = b;
}
}
从配置中删除了A
说明。所以它只是
<context:annotation-config/>
<context:component-scan
base-package="com">
</context:component-scan>
但是B不再注射了。可能我应该指定自动装配类型或像这样的smt。那我该如何解决呢?
答案 0 :(得分:5)
您必须使用ApplicationContext
而不是普通BeanFactory
。似乎BeanFactory
没有运行后处理器,包括寻找@Autowired
注释的处理器。我将尝试为此找到一份文档,同时尝试:
new ClassPathXmlApplicationContext("/spring.xml").getBean(B.class);
BTW @Autowired
对setter,构造函数,字段等完全有效(source):
将构造函数,字段,setter方法或配置方法标记为由Spring的依赖注入工具自动装配。
答案 1 :(得分:0)
我想你应该试试
@Component
public class A {
@Autowired
private B b;
}
}
@Component
public class B {}
您可以参考以下链接中的示例: http://www.roseindia.net/tutorial/spring/spring3/ioc/autoscanig.html