spring application listener
在 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)
複製程式碼