基于spring boot排除掃描類的三種方式小結(jié)
最近在做單測(cè)的時(shí)候,由于自己配置的spring boot容器會(huì)默認(rèn)掃描很多不想被加載,網(wǎng)上中文的文章并不多,所以來總結(jié)一下。
默認(rèn)下面描述的類都在一個(gè)包下面
第一步我們新建一個(gè)應(yīng)用啟動(dòng)的類,一個(gè)類用來充當(dāng)Configuration,為了能明顯的感知到其到底有沒生效,我編寫如下:
@SpringBootApplication public class Test { public static void main(String[] args) { new SpringApplication(Test.class).run(args); } }
@Configuration public class MyConfig { @Bean public BeanPostProcessor beanPostProcessor() { System.out.println("初始化了 bean BeanPostProcessor"); return new BeanPostProcessor() { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("加載了bean " + beanName); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } }; } }
我們可以啟動(dòng)應(yīng)用發(fā)現(xiàn)輸出
初始化了 bean BeanPostProcessor 加載了bean org.springframework.context.event.internalEventListenerProcessor 加載了bean org.springframework.context.event.internalEventListenerFactory 加載了bean org.springframework.boot.autoconfigure.AutoConfigurationPackages 加載了bean org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration 加載了bean org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration 加載了bean objectNamingStrategy 加載了bean mbeanServer 加載了bean mbeanExporter 加載了bean org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration 加載了bean spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties 加載了bean org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration 加載了bean org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration
說明被@Configuration 修飾的類MyConfig本身被掃描了。
方法1:用exclude指明明確要排除的類.
@SpringBootApplication @ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {MyConfig.class})}) public class Test { public static void main(String[] args) { new SpringApplication(Test.class).run(args); } }
用ComponentScan的excludeFilters屬性,可以明確排除調(diào)需要掃描的類。
但是這里存在一個(gè)問題,如果要排除的類比較多,那這里會(huì)看起來很冗余。我們可以采用第二種方式。注解排除。
方法2 : 用注解方式排除
public @interface IgnoreScan { }
新建此注解。
在需要忽略的類上添加:
@Configuration @IgnoreScan public class MyConfig { @Bean public BeanPostProcessor beanPostProcessor() { System.out.println("初始化了 bean BeanPostProcessor"); return new BeanPostProcessor() { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("加載了bean " + beanName); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } }; } }
這樣即可排除掉不被掃描了。
方法3 :
第三種方式實(shí)現(xiàn)org.springframework.core.type.filter.TypeFilter,然后也是ComponentScan去排除指定的注解。網(wǎng)上寫的好的文章很多,這里不多說了。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Bigdecimal科學(xué)計(jì)數(shù)問題
這篇文章主要介紹了基于Bigdecimal科學(xué)計(jì)數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06MybatisPlus?構(gòu)造器wrapper的使用與原理解析
本次我們介紹了MybatisPlus?構(gòu)造器wrapper的使用方式及其易錯(cuò)點(diǎn),同時(shí)也針對(duì)其運(yùn)行的原理進(jìn)行了解釋,只有深刻理解了它的原理,我們才能更靈活的使用,并且更快的排查出問題,感興趣的朋友跟隨小編一起看看吧2024-05-05非常適合新手學(xué)生的Java線程池優(yōu)化升級(jí)版
作者是一個(gè)來自河源的大三在校生,以下筆記都是作者自學(xué)之路的一些淺薄經(jīng)驗(yàn),如有錯(cuò)誤請(qǐng)指正,將來會(huì)不斷的完善筆記,幫助更多的Java愛好者入門2022-03-03關(guān)于Spring Cloud 本地屬性覆蓋的問題
這篇文章主要介紹了關(guān)于Spring Cloud 本地屬性覆蓋的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java實(shí)現(xiàn)讀取SFTP服務(wù)器指定目錄文件的方法
SFTP是一種在安全通道上傳輸文件的協(xié)議,它是基于SSH(Secure Shell)協(xié)議的擴(kuò)展,用于在客戶端和服務(wù)器之間進(jìn)行加密的文件傳輸,這篇文章主要介紹了Java實(shí)現(xiàn)讀取SFTP服務(wù)器指定目錄文件,感興趣的朋友跟隨小編一起看看吧2023-08-08Java Swing中的文本框(JTextField)與文本區(qū)(JTextArea)使用實(shí)例
這篇文章主要介紹了Java Swing中的文本框(JTextField)與文本區(qū)(JTextArea)使用實(shí)例,Swing是一個(gè)用于開發(fā)Java應(yīng)用程序用戶界面的開發(fā)工具包,需要的朋友可以參考下2014-10-10如何在Spring Boot項(xiàng)目中使用Spring AI
Spring AI是Spring框架中用于集成和使用人工智能和機(jī)器學(xué)習(xí)功能的組件,它提供了一種簡化的方式來與AI模型進(jìn)行交互,這篇文章主要介紹了Spring Boot 在項(xiàng)目中使用Spring AI,需要的朋友可以參考下2024-05-05Springboot+redis+Vue實(shí)現(xiàn)秒殺的項(xiàng)目實(shí)踐
本文主要介紹了Springboot+redis+Vue實(shí)現(xiàn)秒殺的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Spring中基于xml的AOP實(shí)現(xiàn)詳解
這篇文章主要介紹了Spring中基于xml的AOP實(shí)現(xiàn)詳解,基于xml與基于注解的AOP本質(zhì)上是非常相似的,都是需要封裝橫切關(guān)注點(diǎn),封裝到切面中,然后把橫切關(guān)注點(diǎn)封裝為一個(gè)方法,再把該方法設(shè)置為當(dāng)前的一個(gè)通知,再通過切入點(diǎn)表達(dá)式定位到橫切點(diǎn)就可以了,需要的朋友可以參考下2023-09-09