springboot排除扫描类的三种⽅式
最近在做单测的时候,由于⾃⼰配置的spring boot容器会默认扫描很多不想被加载,⽹上中⽂的⽂章并不多,所以来总结⼀下。默认下⾯描述的类都在⼀个包下⾯。
第⼀步我们新建⼀个应⽤启动的类,⼀个类⽤来充当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 {
springboot中文System.out.println("加载了bean " + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
};
}
}
我们可以启动应⽤发现输出
初始化了 bean BeanPostProcessor
加载了bean t.event.internalEventListenerProcessor
加载了bean t.event.internalEventListenerFactory
加载了bean org.springframework.boot.autoconfigure.AutoConfigurationPackages
加载了bean org.springframework.t.PropertyPlaceholderAutoConfiguration
加载了bean org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration
加载了bean objectNamingStrategy
加载了bean mbeanServer
加载了bean mbeanExporter
加载了bean org.springframework.t.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属性,可以明确排除调需要扫描的类。
但是这⾥存在⼀个问题,如果要排除的类⽐较多,那这⾥会看起来很冗余。我们可以采⽤第⼆种⽅式。注解排除。
⽅法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 :
第三种⽅式实现ype.filter.TypeFilter,然后也是ComponentScan去排除指定的注解。⽹上写的好的⽂章很多,这⾥不多说了。
个⼈觉得这样的需求还是很适合集成在框架⾥去的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。