SpringBoot中@ComponentScan注解過(guò)濾排除不加載某個(gè)類(lèi)的3種方法
SpringBoot—@ComponentScan注解過(guò)濾排除某個(gè)類(lèi)的三種方法
一、引言
在引用jar包的依賴同時(shí),經(jīng)常遇到有包引用沖突問(wèn)題。一般我們的做法是在Pom文件中的dependency節(jié)點(diǎn)下添加exclusions配置,排除特定的包。這樣按照包做的排除范圍是比較大的,現(xiàn)在我們想只排除掉某個(gè)特定的類(lèi),這時(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過(guò)濾特定類(lèi)
@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配置,可以精確的排除掉特定類(lèi)的加載和注入;
- 缺點(diǎn):如果有很多類(lèi)需要排除的話,這種寫(xiě)法就比較臃腫了;
方法三:@ComponentScan.Filter使用正則過(guò)濾特定類(lèi)
@ComponentScan(value = "com.xxx",excludeFilters = {
@ComponentScan.Filter(type = FilterType.REGEX,pattern = {
//以下寫(xiě)正則表達(dá)式,需要對(duì)目標(biāo)類(lèi)的完全限定名完全匹配,否則不生效
"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):可以通過(guò)正則去匹配目標(biāo)類(lèi)型的完全限定名,一個(gè)表達(dá)式可以過(guò)濾很多對(duì)象;
三、總結(jié)
不同場(chǎng)景下按需配置即可,我遇到的問(wèn)題是有那么幾十個(gè)類(lèi)有沖突,不想注入這些類(lèi),這時(shí)我使用正則過(guò)濾特定類(lèi)的方法解決了我的問(wèn)題。
到此這篇關(guān)于SpringBoot中@ComponentScan注解過(guò)濾排除不加載某個(gè)類(lèi)的3種方法的文章就介紹到這了,更多相關(guān)@ComponentScan注解過(guò)濾排除某個(gè)類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解Java并發(fā)編程之LinkedBlockingQueue隊(duì)列
本文主要介紹了Java并發(fā)編程之LinkedBlockingQueue隊(duì)列,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
使用Java Stream將集合轉(zhuǎn)換為一對(duì)一Map的方法詳解
在日常的開(kāi)發(fā)工作中,我們經(jīng)常使用到Java Stream,特別是Stream API中提供的Collectors.toList()收集器,但有些場(chǎng)景下,我們需要將集合轉(zhuǎn)換為Map,所以本文就給大家介紹了如何使用Java Stream將集合轉(zhuǎn)換為一對(duì)一Map,需要的朋友可以參考下2025-12-12
jackson在springboot中的使用方式-自定義參數(shù)轉(zhuǎn)換器
這篇文章主要介紹了jackson在springboot中的使用方式-自定義參數(shù)轉(zhuǎn)換器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
spring自定義注解實(shí)現(xiàn)攔截器的實(shí)現(xiàn)方法
本篇文章主要介紹了spring自定義注解實(shí)現(xiàn)攔截器的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
java 工廠模式的講解及優(yōu)缺點(diǎn)的介紹
這篇文章主要介紹了java 工廠模式的講解及優(yōu)缺點(diǎn)的介紹的相關(guān)資料, 簡(jiǎn)單工廠模式,又稱(chēng)為靜態(tài)工廠方法(Static Factory Method)模式,它屬于類(lèi)創(chuàng)建型模式,需要的朋友可以參考下2017-08-08

