Java Spring只能注册构造函数bean吗?
假设我有一个类Java Spring只能注册构造函数bean吗?,java,spring,autowired,Java,Spring,Autowired,假设我有一个类a(@Component)和一个类B(@Component)。类A需要B的实例。如果我用@Autowired将classB作为字段放在a中,即使Spring会找到B组件(通过@ComponentScan),classa字段也将为空。但是,如果我将B作为参数放在A的构造函数中,并用@Autowired注释构造函数,它将非常有效 有没有办法将B从A的构造函数中排除?正如@LuiggiMendoza提到的:创建@PostConstruct方法很简单:您应该只使用@PostConstruc
a
(@Component)和一个类B
(@Component)。类A
需要B
的实例。如果我用@Autowired将classB
作为字段放在a中,即使Spring会找到B
组件(通过@ComponentScan),classa
字段也将为空。但是,如果我将B
作为参数放在A
的构造函数中,并用@Autowired注释构造函数,它将非常有效
有没有办法将
B
从A
的构造函数中排除?正如@LuiggiMendoza提到的:创建@PostConstruct方法很简单:您应该只使用@PostConstruct注释您的方法:
public class A {
@PostConstruct
void init(){
//do smth here
}
}
或者,如果您使用XML配置,您可以将
init method
参数添加到bean定义中。如果Spring将找到B组件,那么Class A字段将为空,这是什么意思?那不是真的。你的具体问题是什么?看起来您希望/需要在创建A
的实例时使用B
触发某些方法。为什么该字段为空?我在这里遗漏了什么吗?我个人更喜欢自动连接构造函数。因为我可以通过单元测试更容易地模拟它。但是在实际应用中,使用构造函数自动连接和直接自动连接实际变量之间应该没有任何区别。@Ractoc是的。自动关联字段在a和B之间建立弱关联(B可以延迟自动关联),而构造函数参数在a和B之间建立强关联,您可以说第二个是合成。另外,从技术上讲,在第一种情况下,在构建A的过程中,您不能使用B的任何方法,而在第二种情况下,您可以。但为了克服这个问题,您可能在中有一个@PostConstruct
方法,它将在创建和注入后被激发。啊,我再一次看到还有更多的东西需要学习…所以我想在构造函数中做的每一件事,我都应该在@PostConstruct方法中做?是的,它将在构造Bean之后被调用