如果我们说我有一个类A
(@Component)和一个类B
(@Component)。类A
需要B
的实例。如果我使用@Autowired将类B
作为A中的字段,即使Spring将找到B
组件(通过@ComponentScan),类A
字段也将为空。但是,如果我在A
的构造函数中将B
作为参数并使用@Autowired注释构造函数,则它将完美工作。Spring只能注册构造器bean吗?
有没有什么办法可以从A
的构造函数中排除B
?
如果我们说我有一个类A
(@Component)和一个类B
(@Component)。类A
需要B
的实例。如果我使用@Autowired将类B
作为A中的字段,即使Spring将找到B
组件(通过@ComponentScan),类A
字段也将为空。但是,如果我在A
的构造函数中将B
作为参数并使用@Autowired注释构造函数,则它将完美工作。Spring只能注册构造器bean吗?
有没有什么办法可以从A
的构造函数中排除B
?
由于@LuiggiMendoza提到:创建@PostConstruct方法很简单:你只应@PostConstruct注解你的方法:
public class A {
@PostConstruct
void init(){
//do smth here
}
}
或者,如果您使用XML配置,你可以init-method
参数添加到您的bean定义。
因此,我想在构造函数中执行,我应该在@PostConstruct方法中做? – 2015-04-01 06:10:16
是的,它会在豆的建造之后被调用 – 2015-04-01 08:34:43
你是什么意思与*事件Spring会发现B组件,A类字段将为空*?这不是真的。你在这里有什么具体问题?看起来你想/需要在创建'A'的实例时使用'B'来触发某种方法。 – 2015-03-30 21:24:01
为什么该字段为空?我在这里错过了什么? – zerocool 2015-03-30 21:24:43
我个人更喜欢自动装配构造函数。如果仅仅因为我可以从我的单元测试中更容易地嘲笑它。但在实际的应用程序中,使用构造函数自动装配和直接自动装配实际变量应该没有区别。 – Ractoc 2015-03-30 21:30:51