Spring Boot 筆記之SpringApplication(二):Spring Boot事件

打印出source:有2個事件,一個是ContextRefreshedEvent、一個是PayloadApplicationEventspring

能夠看出來他們的事件源是同一個。this

自定義事件:spa

輸出了3個事件,包括自定義事件。3d

關閉事件:code

又出來了一個事件。視頻

能夠經過泛型的方式對某一個事件進行監聽。blog

 

Spring Boot事件進程

Spring事件事件

Spring內部發送事件

`ContextRefreshedEvent`

  • ApplicationContextEventio

    • ApplicationEvent

refresh()->finishRefresh()->publishEvent(new ContextRefreshEvent(this))

ContextClosedEvent

  • ApplicationContextEvent

    • ApplicationEvent

close()->doClose()->publishEvent(new ContextClosedEvent(this));

事件最終是由這些方法顯示調用的。

Spring事件都是ApplicationEvent類型的。

自定義事件

PayloadApplicationEvent

Spring事件都是ApplicationEvent類型

發送Spring事件經過AbstractApplicationContext#multicastEvent(org.springframework.context.ApplicationEvent, org.springframework.core.ResolvableType)

Spring事件的類型ApplicationEvent

Spring事件監聽器ApplicationListener

Spring事件廣播器ApplicationEventMulticaster

  • 實現類SimpleApplicationEventMulticaster

     

Spring事件理解爲消息

ApplicationEvent至關於消息內容

ApplicationListener至關於消息消費者、訂閱者

ApplicationEventMulticaster至關於消息生產者、發佈者

咱們寫一個簡單的例子:

去官網看一下Spring事件究竟是個什麼東西。

Spring  Boot事件監聽示例

加一個簡單的監聽器:

這個地方跟視頻中有差別,視頻中沒有結束進程,可是我本身寫demo運行,結束進程了。後來我讓朋友在他那邊建立了個項目,把這個代碼貼給他,他那邊也沒有結束進程。這個是怎麼回事呢?

1.ApplicationStartingEvent

2.ApplicationEnvironmentPreparedEvent

3.ApplicationPreparedEvent

4.ContextRefreshedEvent

5.ApplicationStartedEvent

6.ApplicationReadyEvent

7.ContextClosedEvent

本身的demo運行結果是這7個,視頻中是這7個,

由此能夠推斷出個人demo進程結束而視頻中的沒有,是由於jar包不同致使的。

視頻中示例加上close後,出現了8個:

相關文章
相關標籤/搜索