為什么說要慎用SpringBoot @ComponentScan
為了統(tǒng)一定制一個(gè)過濾器(Filter),所以在另外一個(gè)工程里面創(chuàng)建了一個(gè)過濾器,并通過jar包的方法導(dǎo)入當(dāng)前項(xiàng)目,通過@ComponentScan({'org.example.config'})指定掃描包路徑。
下面的我的啟動(dòng)類:
導(dǎo)入的jar:
問題
預(yù)期效果是這樣,正常加載
啟動(dòng)后,原來的Swagger目錄進(jìn)去是這樣的,原來的Controller全部都沒有被加載進(jìn)來
以為過濾器導(dǎo)致所有路徑?jīng)]有加載,后面百度了解BasicErrorController是在沒有定義SwaggerConfig配置時(shí)默認(rèn)的controller
那我的SwaggerConfig就沒有生效了呀???
水落石出了,SwaggerConfig沒有被加載到容器中,原來是啟動(dòng)類惹的貨,為了加載一個(gè)啟動(dòng)類外的bean-MyFilterBean到容器中導(dǎo)致--啟動(dòng)類配置@ComponentScan({'org.example.config'})
如果啟動(dòng)類不加@ComponentScan注解,那它默認(rèn)是掃描啟動(dòng)類及子包下的類。我這配置不就是改變了最初的功能嗎,真的是基礎(chǔ)不牢地洞山搖~~~
解決方案1、多加個(gè)@ComponentScan,這樣也掃描啟動(dòng)類及子包下的類了
2、直接將當(dāng)前啟動(dòng)類路徑加入掃描路徑中
3、
在resourecs資源目錄下創(chuàng)建META-INF文件夾,在文件夾中創(chuàng)建spring.factories文件
文件內(nèi)容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.example.config.MyFilterBean
啟動(dòng)后發(fā)現(xiàn)MyFilterBean也被加載到bean中了(在調(diào)用api時(shí),通過日記/斷點(diǎn)等驗(yàn)證)
注:
由于直接在過濾器類上使用@Compont注解注冊過濾器默認(rèn)會(huì)過濾所有的URL請求生效,上面測試時(shí)都是為了方便。真實(shí)使用時(shí),為了可以控制特定的URL才觸發(fā)過濾器,我們通過FilterRegistrationBean來注冊過濾器,過濾的URL模式通過FilterRegistrationBean類的addUrlPatterns方法設(shè)置,如下圖所示:
到此這篇關(guān)于為什么說要慎用SpringBoot @ComponentScan的文章就介紹到這了,更多相關(guān)SpringBoot @ComponentScan 慎用內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. ASP常用日期格式化函數(shù) FormatDate()2. chat.asp聊天程序的編寫方法3. CSS 使用Sprites技術(shù)實(shí)現(xiàn)圓角效果4. phpstudy apache開啟ssi使用詳解5. 詳解瀏覽器的緩存機(jī)制6. ASP中if語句、select 、while循環(huán)的使用方法7. 怎樣才能用js生成xmldom對象,并且在firefox中也實(shí)現(xiàn)xml數(shù)據(jù)島?8. HTML中的XML數(shù)據(jù)島記錄編輯與添加9. 利用FastReport傳遞圖片參數(shù)在報(bào)表上展示簽名信息的實(shí)現(xiàn)方法10. 推薦一個(gè)好看Table表格的css樣式代碼詳解
