Sta*_*lin 4 java spring annotations autowired
我有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);
Run Code Online (Sandbox Code Playgroud)
配置
<context:annotation-config/>
<context:component-scan
base-package="com">
</context:component-scan>
<bean class="com.A" autowire="byType" />
Run Code Online (Sandbox Code Playgroud)
它工作得很好.现在我也希望A通过注释进行配置.所以我添加了@Component注释A
@Component
public class A {
private B b;
@Autowired
public void setB(B b) {
this.b = b;
}
}
Run Code Online (Sandbox Code Playgroud)
并A从配置中删除了说明.所以它只是
<context:annotation-config/>
<context:component-scan
base-package="com">
</context:component-scan>
Run Code Online (Sandbox Code Playgroud)
但是B不再注射了.可能我应该指定自动装配类型或像这样的smt.那么我该如何解决呢?
你必须使用ApplicationContext而不是普通的BeanFactory.似乎BeanFactory没有运行后处理器,包括寻找@Autowired注释的那个.我将尝试为此找到一份文档,同时尝试:
new ClassPathXmlApplicationContext("/spring.xml").getBean(B.class);
Run Code Online (Sandbox Code Playgroud)
BTW @Autowired对于setter,构造函数,字段等完全有效(来源):
将构造函数,字段,setter方法或配置方法标记为由Spring的依赖注入工具自动装配.
| 归档时间: |
|
| 查看次数: |
3341 次 |
| 最近记录: |