為什么說要慎用SpringBoot @ComponentScan
場景復(fù)現(xiàn)
為了統(tǒng)一定制一個過濾器(Filter),所以在另外一個工程里面創(chuàng)建了一個過濾器,并通過jar包的方法導(dǎo)入當(dāng)前項目,通過@ComponentScan({"org.example.config"})指定掃描包路徑。
下面的我的啟動類:
導(dǎo)入的jar:
問題
預(yù)期效果是這樣,正常加載
啟動后,原來的Swagger目錄進去是這樣的,原來的Controller全部都沒有被加載進來
解密
以為過濾器導(dǎo)致所有路徑?jīng)]有加載,后面百度了解BasicErrorController是在沒有定義SwaggerConfig配置時默認的controller
那我的SwaggerConfig就沒有生效了呀???
水落石出了,SwaggerConfig沒有被加載到容器中,原來是啟動類惹的貨,為了加載一個啟動類外的bean-MyFilterBean到容器中導(dǎo)致--啟動類配置@ComponentScan({"org.example.config"})
如果啟動類不加@ComponentScan注解,那它默認是掃描啟動類及子包下的類。我這配置不就是改變了最初的功能嗎,真的是基礎(chǔ)不牢地洞山搖~~~
解決方案
1、多加個@ComponentScan,這樣也掃描啟動類及子包下的類了
2、直接將當(dāng)前啟動類路徑加入掃描路徑中
3、
在resourecs資源目錄下創(chuàng)建META-INF文件夾,在文件夾中創(chuàng)建spring.factories文件
文件內(nèi)容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.example.config.MyFilterBean
啟動后發(fā)現(xiàn)MyFilterBean也被加載到bean中了(在調(diào)用api時,通過日記/斷點等驗證)
注:
由于直接在過濾器類上使用@Compont注解注冊過濾器默認會過濾所有的URL請求生效,上面測試時都是為了方便。真實使用時,為了可以控制特定的URL才觸發(fā)過濾器,我們通過FilterRegistrationBean來注冊過濾器,過濾的URL模式通過FilterRegistrationBean類的addUrlPatterns方法設(shè)置,如下圖所示:
到此這篇關(guān)于為什么說要慎用SpringBoot @ComponentScan的文章就介紹到這了,更多相關(guān)SpringBoot @ComponentScan 慎用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot項目啟動類錯誤(找不到或無法加載主類 com.**Application)
本文主要介紹了spring-boot項目啟動類錯誤(找不到或無法加載主類 com.**Application),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05java String類功能、原理與應(yīng)用案例【統(tǒng)計、判斷、轉(zhuǎn)換等】
這篇文章主要介紹了java String類功能、原理與應(yīng)用案例,結(jié)合實例形式詳細分析了java String類的基本功能、構(gòu)造方法,以及使用String類實現(xiàn)統(tǒng)計、判斷、轉(zhuǎn)換等功能相關(guān)操作技巧,需要的朋友可以參考下2019-03-03