2015-03-30 36 views
2

如果我们说我有一个类A(@Component)和一个类B(@Component)。类A需要B的实例。如果我使用@Autowired将类B作为A中的字段,即使Spring将找到B组件(通过@ComponentScan),类A字段也将为空。但是,如果我在A的构造函数中将B作为参数并使用@Autowired注释构造函数,则它将完美工作。Spring只能注册构造器bean吗?

有没有什么办法可以从A的构造函数中排除B

+0

你是什么意思与*事件Spring会发现B组件,A类字段将为空*?这不是真的。你在这里有什么具体问题?看起来你想/需要在创建'A'的实例时使用'B'来触发某种方法。 – 2015-03-30 21:24:01

+0

为什么该字段为空?我在这里错过了什么? – zerocool 2015-03-30 21:24:43

+0

我个人更喜欢自动装配构造函数。如果仅仅因为我可以从我的单元测试中更容易地嘲笑它。但在实际的应用程序中,使用构造函数自动装配和直接自动装配实际变量应该没有区别。 – Ractoc 2015-03-30 21:30:51

回答

1

由于@LuiggiMendoza提到:创建@PostConstruct方法很简单:你只应@PostConstruct注解你的方法:

public class A { 
    @PostConstruct 
    void init(){ 
     //do smth here 
    } 
} 

或者,如果您使用XML配置,你可以init-method参数添加到您的bean定义。

+0

因此,我想在构造函数中执行,我应该在@PostConstruct方法中做? – 2015-04-01 06:10:16

+0

是的,它会在豆的建造之后被调用 – 2015-04-01 08:34:43

相关问题