日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot————Web应用启动时自动执行ApplicationListener用法

發布時間:2025/3/12 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot————Web应用启动时自动执行ApplicationListener用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:《web服務啟動spring自動執行ApplicationListener的用法》

引言

我們知道,一般來說一個項目啟動時需要加載或者執行一些特殊的任務來初始化系統,通常的做法就是用servlet去初始化,但是servlet在使用Spring bean時不能直接注入,還需要在web.xml配置,比較麻煩。今天介紹一下使用spring啟動初始化的方法。其實很簡單,只需兩步就可以了。

在開發時有時候需要在整個應用開始運行時執行一些特定代碼,比如初始化環境,準備測試數據、加載一些數據到內存等等。

在spring中可以通過ApplicationListener來實現相關的功能,加載完成后觸發contextrefreshedevent事件(上下文件刷新事件)

但是這個時候,會存在一個問題,在web 項目中(spring mvc),系統會存在兩個容器,一個是root application context?,另一個就是我們自己的?projectName-servlet? context(作為root application context的子容器)。

這種情況下,就會造成onApplicationEvent方法被執行兩次。為了避免上面提到的問題,我們可以只在root application context初始化完成后調用邏輯代碼,其他的容器的初始化完成,則不做任何處理,修改后代碼。

實現方式

1、實現ApplicationListener接口:

public class Init implements ApplicationListener<ContextRefreshedEvent>{@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {//root application context 沒有parentif(event.getApplicationContext().getDisplayName().equals("RootWebApplicationContext")){//TODO 這里寫下將要初始化的內容}} }

2、將Init類注冊到Spring 容器中

@Configuration public class ListenerConfig {@Beanpublic Init init() {return new Init();} }

或通過注解方式:

@Component public class Init implements ApplicationListener<ContextRefreshedEvent> {// 省略內部代碼 }

二次調用問題

上面第一步中的實現代碼已經通過判斷父容器來解決了二次調用的問題,關于二次調用的解釋,可以參考下面這篇文章:

《Spring ApplicationListener使用方法及問題》

總結

以上是生活随笔為你收集整理的Spring Boot————Web应用启动时自动执行ApplicationListener用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。