Вызов метода После того, как все 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, который имеет доступ к рассматриваемому компоненту.

Другие вопросы по тегам