我有一個複雜的java程序需要在Web ApplicationContext和SpringBeans初始化後立即調用。調用一個方法畢竟SpringBeans和ApplicationContext已經初始化了
我試過玩弄 <bean id="..." class="..." init-method="initialize">
但這種方法會調用applicationContext.get().getBean(beanId);
方法。
我想知道是否有人知道如何做到這一點。
謝謝。
我有一個複雜的java程序需要在Web ApplicationContext和SpringBeans初始化後立即調用。調用一個方法畢竟SpringBeans和ApplicationContext已經初始化了
我試過玩弄 <bean id="..." class="..." init-method="initialize">
但這種方法會調用applicationContext.get().getBean(beanId);
方法。
我想知道是否有人知道如何做到這一點。
謝謝。
您可能會收到ContextRefreshedEvent
與ApplicationListener
。
您可以添加一個定製的BeanFactoryPostProcessor,它可以訪問相關的bean。
在Spring 4.2之後,您可以使用註釋將事件監聽器附加到Springs Lifecycle事件(以及您自己的事件)。簡單地將@EventListener添加到一個方法中,並將事件類型作爲第一個(也是唯一的)參數,Spring將自動檢測並將其連接起來。
https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2
@Component
public class MyListener {
@EventListener
public void handleContextRefresh(ContextRefreshedEvent event) {
...
}
}
比創建一個bean更容易 – Aakash 2017-06-03 17:35:20
您可以使用ApplicationListener<E>
用於此目的。在泛型類型參數中,您可以使用ContextRefreshedEvent
來滿足您的要求。並且請注意,在覆蓋的方法onApplicationEvent
中,您可以執行任何操作,如自動裝入bean或將其用作服務或從此處調用另一個服務。並注意其如何不同於@PostConstructor
public class MyContextRefreshListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
//do what you want
}
}
不執行的BeanFactoryPostProcessor之前* *所有的豆類都被初始化? – AJPerez 2018-01-09 09:44:49