基于spring boot排除掃描類(lèi)的三種方式小結(jié)
最近在做單測(cè)的時(shí)候,由于自己配置的spring boot容器會(huì)默認(rèn)掃描很多不想被加載,網(wǎng)上中文的文章并不多,所以來(lái)總結(jié)一下。
默認(rèn)下面描述的類(lèi)都在一個(gè)包下面第一步我們新建一個(gè)應(yīng)用啟動(dòng)的類(lèi),一個(gè)類(lèi)用來(lái)充當(dāng)Configuration,為了能明顯的感知到其到底有沒(méi)生效,我編寫(xiě)如下:
@SpringBootApplicationpublic class Test { public static void main(String[] args) {new SpringApplication(Test.class).run(args); }}
@Configurationpublic 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
說(shuō)明被@Configuration 修飾的類(lèi)MyConfig本身被掃描了。
方法1:用exclude指明明確要排除的類(lèi).@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)需要掃描的類(lèi)。
但是這里存在一個(gè)問(wèn)題,如果要排除的類(lèi)比較多,那這里會(huì)看起來(lái)很冗余。我們可以采用第二種方式。注解排除。
方法2 : 用注解方式排除public @interface IgnoreScan {}
新建此注解。
在需要忽略的類(lèi)上添加:
@Configuration@IgnoreScanpublic 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)上寫(xiě)的好的文章很多,這里不多說(shuō)了。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法2. Linux刪除系統(tǒng)自帶版本Python過(guò)程詳解3. PHP如何開(kāi)啟Opcache功能提升程序處理效率4. Python3 json模塊之編碼解碼方法講解5. 在線php代碼縮進(jìn)、代碼美化工具:PHP Formatter6. Android 簡(jiǎn)單的實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼功能7. Python 合并拼接字符串的方法8. ASP.NET MVC使用jQuery ui的progressbar實(shí)現(xiàn)進(jìn)度條9. Android Studio實(shí)現(xiàn)格式化XML代碼順序10. 淺談?dòng)蓀osition屬性引申的css進(jìn)階討論

網(wǎng)公網(wǎng)安備