打印出source:有2個事件,一個是ContextRefreshedEvent、一個是PayloadApplicationEventspring
能夠看出來他們的事件源是同一個。this
自定義事件:spa
輸出了3個事件,包括自定義事件。3d
關閉事件:code
又出來了一個事件。視頻
能夠經過泛型的方式對某一個事件進行監聽。blog
Spring Boot事件進程
Spring事件事件
ContextRefreshedEvent
`ApplicationContextEvent
io
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個: