如何在另一个bean之前运行依赖于某个bean的方法?
我有两个豆子。 SecondBean
取决于FirstBean
。此外,在创建SecondBean
之前,我必须执行一些初始化逻辑,该逻辑应该与FirstBean
和其他一些bean一起执行。
我会想象这样的事情(它不起作用因为初始化不是Bean):
@Autowired
public void initialization(FirstBean firstBean, SomeTotalyOtherBean otherBean){
firstBean.doSomething(otherBean);
}
@Bean
@DependsOn("initialization")
public SecondBean secondBean(FirstBean firstBean) {
return new SecondBean(firstBean);
}
@Bean
public FirstBean firstBean() {
return new FirstBean();
}
我知道我可以将所有初始化过程移动到firstBean
方法中,但在我的情况下,它似乎并不正确,因为此过程与firstBean
创建无关。我还可以将初始化过程移动到secondBean
方法,但它也不适合那里,因为此逻辑与secondBean
创建无关。这只是一种逻辑,只有在这种情况下才能在这些bean创建之间执行。
答案 0 :(得分:2)
合并firstBean()和初始化(...),以便firstBean()返回初始化的bean。
Imo它是一个更好的设计,只有在它准备好用作依赖/初始化后才能发布它。
编辑:初始化是否可以在FirstBean的构造函数中发生?
答案 1 :(得分:1)
这听起来像一种可能的方法一样简单:
/*@Autowired
public void initialization(FirstBean firstBean, SomeTotalyOtherBean otherBean){
firstBean.doSomething(otherBean);
}*/
@Bean
@Autowired //!
//@DependsOn("initialization")
public SecondBean secondBean(FirstBean firstBean) {
return new SecondBean(firstBean);
}
@Autowired //! SomeTotalyOtherBean should be "visible" to this context...
@Bean
public FirstBean firstBean(SomeTotalyOtherBean other) {
FirstBean chill = new FirstBean();//
chill.doSomething(other);
return chill;
}