麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

Spring Boot應(yīng)用事件監(jiān)聽示例詳解

2024-07-14 08:43:01
字體:
供稿:網(wǎng)友

前言

本文主要給大家介紹了關(guān)于Spring Boot應(yīng)用事件監(jiān)聽的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細的介紹吧

1. Spring Boot特有的應(yīng)用事件

除了Spring框架的事件,Spring Boot的SpringApplication也發(fā)送了一些自己的事件:

  • ApplicationStartingEvent:在任何處理(除了注冊listener和initializer)開始之前發(fā)送。
  • ApplicationEnvironmentPreparedEvent: 在context創(chuàng)建之前,而用到context中的Environment已經(jīng)被識別時發(fā)送。
  • ApplicationContextInitializedEvent: SpringApplication正在啟動,ApplicationContext已準備好且ApplicationContextInitializer已被調(diào)用但是bean的定義還沒有被加載時發(fā)送。
  • ApplicationPreparedEvent: 在context刷新之前,在bean的定義已經(jīng)被加載之后調(diào)用。
  • ApplicationStartedEvent: 在任何應(yīng)用和command-line runner調(diào)用之前,而context已經(jīng)被刷新時發(fā)送。
  • ApplicationReadyEvent: 在任何應(yīng)用和command-line runner被調(diào)用的時候發(fā)送,它意味著應(yīng)用可以接受請求了。
  • ApplicationFailedEvent: 在啟動時有異常的時候發(fā)送。

有些事件是在ApplicationContext創(chuàng)建之前觸發(fā)的,所以我們不能用常規(guī)的注冊成bean的事件監(jiān)聽方式:

  • 注解了@EventListener注解分方法的類注冊的bean;
  • 實現(xiàn)了ApplicationListener<Event>接口的類注冊的bean。

像ApplicationStartedEvent和ApplicationReadyEvent是ApplicationContext創(chuàng)建之后觸發(fā)的,可以用上述兩種方式來監(jiān)聽事件。

2. 如何監(jiān)聽這些事件

我們可以通過下面的方式注冊監(jiān)聽:

2.1. SpringApplication.addListeners(...)

SpringApplication application = new SpringApplication(StartEventsApplication.class);application.addListeners(  (ApplicationListener<ApplicationStartingEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),  (ApplicationListener<ApplicationEnvironmentPreparedEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),  (ApplicationListener<ApplicationContextInitializedEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),  (ApplicationListener<ApplicationPreparedEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),  (ApplicationListener<ApplicationStartedEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),  (ApplicationListener<ApplicationReadyEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()));application.run(args);

2.2. SpringApplicationBuilder.listeners(...)

new SpringApplicationBuilder()   .sources(StartEventsApplication.class)   .listeners(     (ApplicationListener<ApplicationStartingEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),     (ApplicationListener<ApplicationEnvironmentPreparedEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),     (ApplicationListener<ApplicationContextInitializedEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),     (ApplicationListener<ApplicationPreparedEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),     (ApplicationListener<ApplicationStartedEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()),     (ApplicationListener<ApplicationReadyEvent>) event -> log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName())     )   .run(args);

2.3. META-INF/spring.factories

src/main/resources/META-INF/spring.factories:

org.springframework.context.ApplicationListener=top.wisely.startevents.listeners.ApplicationContextInitializedEventListener, /            top.wisely.startevents.listeners.ApplicationEnvironmentPreparedEventListener, /            top.wisely.startevents.listeners.ApplicationPreparedEventListener, /            top.wisely.startevents.listeners.ApplicationReadyEventListener, /            top.wisely.startevents.listeners.ApplicationStartedEventListener, /            top.wisely.startevents.listeners.ApplicationStartingEventListener

監(jiān)聽器只需實現(xiàn)ApplicationListener<要監(jiān)聽的接口類型>接口,無需手動注冊為bean:

public class ApplicationStartedEventListener implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) {  log.info("----------- 監(jiān)聽Spring Boot:" + event.getClass().getSimpleName()); }}

3. 源碼地址

https://github.com/wiselyman/spring-boot-application-events.git

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。 


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人短视频在线播放 | 国产瑟瑟视频 | 国产一级毛片av | 欧美在线观看视频一区二区 | 成人免费观看49www在线观看 | 欧美一级黄色片免费观看 | av视屏| 国产精品jk白丝蜜臀av软件 | 欧美一区高清 | 成人免费久久 | www.54271.com| 久久国产精品久久久久 | 夜间福利网站 | 国产精品视频久久久 | 97久久曰曰久久久 | 久久国产精品99久久人人澡 | 午夜爱爱福利 | 国产精品一区在线免费观看 | 中国字幕av | 女教师~淫辱の动漫在线 | 国产精品一区二区在线 | 久久久www成人免费精品 | 成年免费大片黄在线观看岛国 | 色屁屁xxxxⅹ免费视频 | 亚洲精品永久视频 | 久久久婷婷一区二区三区不卡 | 国产精品二区高清在线 | 午夜视频福利 | 久久99精品国产自在现线 | 精品国产一区二区三区久久久 | 电影一级毛片 | 国产成人精品一区二区仙踪林 | 精品一区在线视频 | 精品伊人| 亚洲精品一区二区三区在线看 | 色av成人天堂桃色av | 欧美一级免费视频 | 欧美视频在线观看一区 | 视频一区 在线 | 特黄一区二区三区 | 国产羞羞视频在线观看 |