Spring面試題之如何在容器啟動後執行一些初始化?小心面試套路!
問題:Spring如何在容器啟動和關閉後執行一些初始化動作?
經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。
其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。
簡單舉例
定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。
問題:Spring如何在容器啟動和關閉後執行一些初始化動作?
經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。
其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。
簡單舉例
定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。
定義xml文件:
問題:Spring如何在容器啟動和關閉後執行一些初始化動作?
經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。
其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。
簡單舉例
定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。
定義xml文件:
定義啟動類:
問題:Spring如何在容器啟動和關閉後執行一些初始化動作?
經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。
其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。
簡單舉例
定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。
定義xml文件:
定義啟動類:
看下效果:
main begin..
ContextRefreshedEvent 事件已發生!
main start to close..
ContextClosedEvent 事件已發生!
main end..
很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....
問題二:請問你還使用過哪些Spring標準事件?
Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,
提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。
說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,
問題:Spring如何在容器啟動和關閉後執行一些初始化動作?
經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。
其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。
簡單舉例
定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。
定義xml文件:
定義啟動類:
看下效果:
main begin..
ContextRefreshedEvent 事件已發生!
main start to close..
ContextClosedEvent 事件已發生!
main end..
很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....
問題二:請問你還使用過哪些Spring標準事件?
Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,
提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。
說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,
這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。
簡單舉例
實現一個“Lifecycle”類:
問題:Spring如何在容器啟動和關閉後執行一些初始化動作?
經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。
其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。
簡單舉例
定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。
定義xml文件:
定義啟動類:
看下效果:
main begin..
ContextRefreshedEvent 事件已發生!
main start to close..
ContextClosedEvent 事件已發生!
main end..
很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....
問題二:請問你還使用過哪些Spring標準事件?
Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,
提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。
說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,
這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。
簡單舉例
實現一個“Lifecycle”類:
定義事件:
問題:Spring如何在容器啟動和關閉後執行一些初始化動作?
經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。
其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。
簡單舉例
定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。
定義xml文件:
定義啟動類:
看下效果:
main begin..
ContextRefreshedEvent 事件已發生!
main start to close..
ContextClosedEvent 事件已發生!
main end..
很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....
問題二:請問你還使用過哪些Spring標準事件?
Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,
提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。
說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,
這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。
簡單舉例
實現一個“Lifecycle”類:
定義事件:
定義一個XML:
問題:Spring如何在容器啟動和關閉後執行一些初始化動作?
經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。
其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。
簡單舉例
定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。
定義xml文件:
定義啟動類:
看下效果:
main begin..
ContextRefreshedEvent 事件已發生!
main start to close..
ContextClosedEvent 事件已發生!
main end..
很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....
問題二:請問你還使用過哪些Spring標準事件?
Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,
提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。
說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,
這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。
簡單舉例
實現一個“Lifecycle”類:
定義事件:
定義一個XML:
定義啟動類:
問題:Spring如何在容器啟動和關閉後執行一些初始化動作?
經常我們會遇到一些場景,比如當應用啟動完畢之後做一些初始化動作,比如緩存預熱,數據初始化,開啟服務等等,在應用關閉的時候,執行一些釋放資源,清理的操作。
其實通過Spring自帶的“ContextRefreshedEvent”,“ContextClosedEvent”事件就可以輕鬆實現。
簡單舉例
定義“ContextRefreshedEvent”事件,主要是實現“ApplicationListener”。
定義xml文件:
定義啟動類:
看下效果:
main begin..
ContextRefreshedEvent 事件已發生!
main start to close..
ContextClosedEvent 事件已發生!
main end..
很簡單,當你通過這關的時候,這只是剛剛開始,後面往往還有相關的一系列問題,這就是面試官的套路的....
問題二:請問你還使用過哪些Spring標準事件?
Spring容器除了提供“ContextRefreshedEvent”,“ContextClosedEvent”兩個標準事件外,
提供了其他的事件比如“ContextStartedEvent”,“ContextStoppedEvent”。
說道這兩個事件,我們不得不提下Spring定義的一個生命週期接口,
這個接口定義了兩個方法“start”,"stop"分別和事件“ContextStartedEvent”,“ContextStoppedEvent”配合使用。
簡單舉例
實現一個“Lifecycle”類:
定義事件:
定義一個XML:
定義啟動類:
輸出結果:
main begin..
context start..
MyLifecycle starting
ContextStartedEvent 事件已發生!
context stop..
MyLifeCycleBean stopping
ContextStoppedEvent 事件已發生!
main end..
知道上面的這兩個事件的,我個人覺得已經很不錯啦,但是面試官不會就此罷手的。
思考題:Spring可以在xml裡的 <bean> 配置中 定義init-method 和 destroy-method ,也可以實現上面的效果,為啥還要定義一個如此相似的功能?如果你知道請留言,證明你很牛!
當然這邊還有一個必須要問題:Spring事件的實現原理。關注我們,後續揭曉!