如何在所有其他bean之后创建spring bean?

时间:2017-05-24 07:13:56

标签: spring lifecycle



例如,我的弹簧配置中有3个bean:A,B,C。我想像往常一样创建bean B和C.而且(当创建所有其他bean时)我想要求spring创建bean A.
有什么建议吗?

感谢。

4 个答案:

答案 0 :(得分:0)

您应该尝试@DependsOn adnotation

例如

<bean id="beanOne" class="ExampleBean" depends-on="manager,accountDao">
  <property name="manager" ref="manager" />
</bean>

<bean id="manager" class="ManagerBean" />
<bean id="accountDao" class="x.y.jdbc.JdbcAccountDao" />

答案 1 :(得分:0)

我知道这不是一个bean排序答案,但也许你可以用一个@PostConstruct方法实现你的目标,该方法将在构造bean之后调用,注入依赖关系并设置所有属性。

最好的鼻子

答案 2 :(得分:0)

一旦完全刷新了上下文并且已经创建了所有已配置的bean,Spring框架就会触发ContextRefreshedEvent

您可以尝试创建一个侦听器来捕获该事件并初始化bean A.

@Component
public class ContextRefreshedEventListener implements 
ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        // Init your bean here
    }
}

答案 3 :(得分:0)

更简单的方法是对 bean 使用 @Lazy 注释。这使您的 bean 在上下文初始化期间不会急切地初始化。简而言之,您的 bean 将在您请求时创建,而不是在此之前。

@Bean
@Lazy
public A beanA() {
//some code here
}