我有 2 个组件 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);
配置
<context:annotation-config/>
<context:component-scan
base-package="com">
</context:component-scan>
<bean class="com.A" autowire="byType" />
它运行良好。现在我也想通过注释配置 A
。所以我在 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不再注入(inject)了。也许我应该指定 Autowiring 类型或类似的 smt。那我该如何解决呢?
最佳答案
您必须使用 ApplicationContext
而不是普通的 BeanFactory
。似乎 BeanFactory
不运行后处理器,包括寻找 @Autowired
注释的处理器。我将尝试为此找到一份文档,同时尝试:
new ClassPathXmlApplicationContext("/spring.xml").getBean(B.class);
顺便说一句,@Autowired
在 setter、构造函数、字段等上完全有效(source):
Marks a constructor, field, setter method or config method as to be autowired by Spring's dependency injection facilities.
关于java - Spring 中的 Autowiring 和注解配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030952/