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

How can I create the spring bean after all other beans?



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

谢谢

你应该试试 @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" />

我知道这并不是真正的 bean 排序答案,但也许您可以使用 @PostConstruct 方法来实现您的目标,该方法将在构造 bean、注入依赖项并设置所有属性后立即调用。

最好的NAS

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

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

@Component
public class ContextRefreshedEventListener implements 
ApplicationListener<ContextRefreshedEvent> {

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

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

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