java прослушивает ContextRefreshedEvent

У меня есть classX в моем весеннем приложении, в котором я хочу узнать, были ли инициализированы все весенние бобы. Для этого я пытаюсь слушать ContextRefreshedEvent.

до сих пор у меня есть следующий код, но я не уверен, если это достаточно.

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

public classX implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
       //do something if all apps have initialised
    }
}
  1. это правильный подход, чтобы выяснить, если все зерна имеют initialsed?
  2. что еще мне нужно сделать, чтобы иметь возможность слушать ContextRefreshedEvent ? Мне нужно зарегистрировать classX где-нибудь в xml-файлах ?

2 ответов


A ContextRefreshEvent происходит

когда ApplicationContext инициализируется и обновляется.

Итак, вы на правильном пути.

что вам нужно сделать, это объявить определение Bean для classX.

С @Component и компонент сканирования за пакет в

@Component
public classX implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
       //do something if all apps have initialised
    }
}

или <bean> декларация

<bean class="some.pack.classX"></bean>

Spring обнаружит, что Боб имеет тип ApplicationListener и зарегистрировать его без каких-либо дальнейшая настройка.


просто FYI, Java имеет соглашения об именах для типов, переменных и т. д. Для классов соглашение состоит в том, чтобы их имена начинались с заглавного алфавитного символа.


Весна >= 4.2

вы можете использовать прослушиватель событий, управляемый аннотациями, как показано ниже:

@Component
public class classX  {

    @EventListener
    public void handleContextRefresh(ContextRefreshedEvent event) {

    }
}

ApplicationListener, который вы хотите зарегистрировать, определен в подпись метода.