為什么說(shuō)要慎用SpringBoot @ComponentScan
場(chǎng)景復(fù)現(xiàn)
為了統(tǒng)一定制一個(gè)過(guò)濾器(Filter),所以在另外一個(gè)工程里面創(chuàng)建了一個(gè)過(guò)濾器,并通過(guò)jar包的方法導(dǎo)入當(dāng)前項(xiàng)目,通過(guò)@ComponentScan({"org.example.config"})指定掃描包路徑。
下面的我的啟動(dòng)類(lèi):

導(dǎo)入的jar:

問(wèn)題
預(yù)期效果是這樣,正常加載

啟動(dòng)后,原來(lái)的Swagger目錄進(jìn)去是這樣的,原來(lái)的Controller全部都沒(méi)有被加載進(jìn)來(lái)

解密
以為過(guò)濾器導(dǎo)致所有路徑?jīng)]有加載,后面百度了解BasicErrorController是在沒(méi)有定義SwaggerConfig配置時(shí)默認(rèn)的controller
那我的SwaggerConfig就沒(méi)有生效了呀???

水落石出了,SwaggerConfig沒(méi)有被加載到容器中,原來(lái)是啟動(dòng)類(lèi)惹的貨,為了加載一個(gè)啟動(dòng)類(lèi)外的bean-MyFilterBean到容器中導(dǎo)致--啟動(dòng)類(lèi)配置@ComponentScan({"org.example.config"})
如果啟動(dòng)類(lèi)不加@ComponentScan注解,那它默認(rèn)是掃描啟動(dòng)類(lèi)及子包下的類(lèi)。我這配置不就是改變了最初的功能嗎,真的是基礎(chǔ)不牢地洞山搖~~~
解決方案
1、多加個(gè)@ComponentScan,這樣也掃描啟動(dòng)類(lèi)及子包下的類(lèi)了

2、直接將當(dāng)前啟動(dòng)類(lèi)路徑加入掃描路徑中
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í),通過(guò)日記/斷點(diǎn)等驗(yàn)證)
注:
由于直接在過(guò)濾器類(lèi)上使用@Compont注解注冊(cè)過(guò)濾器默認(rèn)會(huì)過(guò)濾所有的URL請(qǐng)求生效,上面測(cè)試時(shí)都是為了方便。真實(shí)使用時(shí),為了可以控制特定的URL才觸發(fā)過(guò)濾器,我們通過(guò)FilterRegistrationBean來(lái)注冊(cè)過(guò)濾器,過(guò)濾的URL模式通過(guò)FilterRegistrationBean類(lèi)的addUrlPatterns方法設(shè)置,如下圖所示:

到此這篇關(guān)于為什么說(shuō)要慎用SpringBoot @ComponentScan的文章就介紹到這了,更多相關(guān)SpringBoot @ComponentScan 慎用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實(shí)例解析Java日期格式工具類(lèi)DateUtil.java
本文主要對(duì)Java日期格式工具類(lèi)DateUtil.java進(jìn)行實(shí)例解析。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
Java并發(fā)編程中的CompletableFuture使用詳解
這篇文章主要介紹了Java并發(fā)編程中的CompletableFuture使用詳解,Future接口定義了操作異步任務(wù)執(zhí)行的一些方法,如獲取異步任務(wù)執(zhí)行的結(jié)果、取消任務(wù)的執(zhí)行、判斷任務(wù)是否被取消,判斷任務(wù)是否執(zhí)行完畢等,需要的朋友可以參考下2023-12-12
arthas?jprofiler做復(fù)雜鏈路的調(diào)用分析
這篇文章主要為大家介紹了arthas?jprofiler做復(fù)雜鏈路的調(diào)用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
springboot集成mybatis-plus全過(guò)程
本文詳細(xì)介紹了如何在SpringBoot環(huán)境下集成MyBatis-Plus,包括配置maven依賴(lài)、application.yaml文件、創(chuàng)建數(shù)據(jù)庫(kù)和Java實(shí)體類(lèi)、Mapper層、Service層和Controller層的設(shè)置,同時(shí),還涵蓋了時(shí)間自動(dòng)填充、分頁(yè)查詢(xún)、多對(duì)一和一對(duì)多的數(shù)據(jù)庫(kù)映射關(guān)系設(shè)置2024-09-09

