如何在所有其他 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
}
例如,我的 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
}