Вызов метода После того, как все SpringBeans и ApplicationContext были инициализированы
У меня есть метод в сложной Java-программе, который должен быть вызван сразу после инициализации Web ApplicationContext и SpringBeans.
Я пытался играть с <bean id="..." class="..." init-method="initialize">
но этот метод будет вызывать applicationContext.get().getBean(beanId);
метод.
Мне было интересно, если кто-нибудь знает, как это сделать.
Спасибо.
4 ответа
Вы можете поймать ContextRefreshedEvent
с ApplicationListener
,
В Spring 4.2 и более поздних версиях вы можете прикреплять прослушиватели событий к событиям жизненного цикла Springs (и свои собственные) с помощью аннотаций. Просто добавьте @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) {
...
}
}
Ты можешь использовать ApplicationListener<E>
для этого. В параметре универсального типа вы можете использовать ContextRefreshedEvent
для вас требование И учтите, что в переопределенном методе onApplicationEvent
Вы можете делать что-либо, например, автоматически связывать компонент, использовать его в качестве службы или вызывать другую службу отсюда. И обратите внимание, что это отличается от @PostConstructor
public class MyContextRefreshListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
//do what you want
}
}
Вы можете добавить пользовательский BeanFactoryPostProcessor, который имеет доступ к рассматриваемому компоненту.