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
}
}
- это правильный подход, чтобы выяснить, если все зерна имеют initialsed?
- что еще мне нужно сделать, чтобы иметь возможность слушать 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, который вы хотите зарегистрировать, определен в подпись метода.