如何在一个bean之后但在Spring中的另一个bean之前运行一个方法?

时间:2018-01-30 20:34:42

标签: java spring javabeans

如何在另一个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创建之间执行。

2 个答案:

答案 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;
}