在 spring
框架中,有多种事件, 这些时间会在不同的运行时刻发布,来通知监听者。本文仅仅介绍 SpringApplicationEvent
的事件的监听。
| EventType | 发布时间 |
|---|---|
ApplicationContextInitializedEvent
|
在 SpringApplication
正在启动, ApplicationContext
已经准备好了, ApplicationContextInitializers
被调用, bean definitions
被加载之前 |
ApplicationStartingEvent
|
在一次启动之前发布 |
ApplicationEnvironmentPreparedEvent
|
在 Environment
准备好之后,会有 context
去使用这一 Environment
, 会在 context
创建之前发出 |
ApplicationPreparedEvent
|
会在 bean definitions
加载之后, refresh
之前发布 |
ApplicationStartedEvent
|
context
更新之后,任何应用或命令行启动调用之前 |
ApplicationReadyEvent
|
任何应用或命令行启动调用之后发布,说明应用已经可以被请求了 |
ApplicationFailedEvent
|
启动发生有异常时发步 |
org.springframework.context.ApplicationListener
这个接口的实例, 其声明如下: @FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
/**
* Handle an application event. * @param event the event to respond to
*/
void onApplicationEvent(E event);
}
SpringApplication.addListeners(…)
或 SpringApplicationBuilder.listeners(…)
来添加监听器。也可以在 META-INF/spring.factories
文件中配置: org.springframework.context.ApplicationListener=com.example.project.MyListener
。 例子:
public class StartingEventListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
System.out.println("called own starting listener");
System.out.println(applicationStartingEvent.getClass());
}
}
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args){
SpringApplication application = new SpringApplication(DemoApplication.class);
application.addListeners(new StartingEventListener());
application.run(args);
}
}
终端运行 jar
包:
$ java -jar build/libs/springlisteners-0.0.1-SNAPSHOT.jar called own starting listener class org.springframework.boot.context.event.ApplicationStartingEvent . ____ _ __ _ _ /// / ___'_ __ _ _(_)_ __ __ _ / / / / ( ( )/___ | '_ | '_| | '_ // _` | / / / / /// ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_/__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.3.RELEASE)