SpringBoot中@ComponentScan注解過濾排除不加載某個(gè)類的3種方法
SpringBoot—@ComponentScan注解過濾排除某個(gè)類的三種方法
一、引言
在引用jar包的依賴同時(shí),經(jīng)常遇到有包引用沖突問題。一般我們的做法是在Pom文件中的dependency節(jié)點(diǎn)下添加exclusions配置,排除特定的包。這樣按照包做的排除范圍是比較大的,現(xiàn)在我們想只排除掉某個(gè)特定的類,這時(shí)我們?cè)趺床僮髂兀?/p>
二、解決沖突的方法
方法一:pom中配置排除特定包
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> <exclusions> <exclusion> <artifactId>slf4j-api</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency>
缺點(diǎn):排除的范圍比較大,不能排除指定對(duì)象;
方法二:@ComponentScan過濾特定類
@ComponentScan(value = "com.xxx",excludeFilters = { @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = { com.xxx.xxx.xxx.class, com.xxx.xxx.xxx.class, .... }) }) @SpringBootApplication public class StartApplication { public static ApplicationContext applicationContext = null; public static void main(String[] args) { applicationContext = SpringApplication.run(StartApplication.class, args); } }
- 優(yōu)點(diǎn):使用FilterType.ASSIGNABLE_TYPE配置,可以精確的排除掉特定類的加載和注入;
- 缺點(diǎn):如果有很多類需要排除的話,這種寫法就比較臃腫了;
方法三:@ComponentScan.Filter使用正則過濾特定類
@ComponentScan(value = "com.xxx",excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX,pattern = { //以下寫正則表達(dá)式,需要對(duì)目標(biāo)類的完全限定名完全匹配,否則不生效 "com.xxx.xxx.impl.service.+", .... }) }) @SpringBootApplication public class StartApplication { public static ApplicationContext applicationContext = null; public static void main(String[] args) { applicationContext = SpringApplication.run(StartApplication.class, args); } }
優(yōu)點(diǎn):可以通過正則去匹配目標(biāo)類型的完全限定名,一個(gè)表達(dá)式可以過濾很多對(duì)象;
三、總結(jié)
不同場(chǎng)景下按需配置即可,我遇到的問題是有那么幾十個(gè)類有沖突,不想注入這些類,這時(shí)我使用正則過濾特定類的方法解決了我的問題。
到此這篇關(guān)于SpringBoot中@ComponentScan注解過濾排除不加載某個(gè)類的3種方法的文章就介紹到這了,更多相關(guān)@ComponentScan注解過濾排除某個(gè)類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nacos?版本不一致報(bào)錯(cuò)Request?nacos?server?failed解決
這篇文章主要為大家介紹了Nacos?版本不一致報(bào)錯(cuò)Request?nacos?server?failed的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11java實(shí)現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例
這篇文章主要介紹了java實(shí)現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例,需要的朋友可以參考下2014-05-05spring容器啟動(dòng)實(shí)現(xiàn)初始化某個(gè)方法(init)
這篇文章主要介紹了spring容器啟動(dòng)實(shí)現(xiàn)初始化某個(gè)方法(init),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08IntelliJ?IDEA?2022安裝注冊(cè)永久激活
java開發(fā)工具IntelliJ?IDEA深受用戶喜愛,很多朋友對(duì)這個(gè)idea開發(fā)工具比較忠心,一旦有新版本發(fā)出,很多小伙伴就迫不及待的想更新,今天小編給大家?guī)砹薸dea2022.1最新永久激活碼,親測(cè)有效,喜歡的朋友快來下載體驗(yàn)吧2022-08-08@AutoConfigurationPackage與@ComponentScan注解區(qū)別
這篇文章主要介紹了@AutoConfigurationPackage與@ComponentScan注解區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06關(guān)于如何正確地定義Java內(nèi)部類方法詳解
在Java中,我們通常是把不同的類創(chuàng)建在不同的包里面,對(duì)于同一個(gè)包里的類來說,它們都是同一層次的,但其實(shí)還有另一種情況,有些類可以被定義在另一個(gè)類的內(nèi)部,本文將詳細(xì)帶你了解如何正確地定義Java內(nèi)部類,需要的朋友可以參考下2023-05-05