基于spring boot排除扫描类的三种方式小结

网友投稿 1004 2022-10-08


基于spring boot排除扫描类的三种方式小结

最近在做单测的时候,由于自己配置的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 postProcessBeforeInitdCXynUZtialization(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;

}

};

}

}

我们可以启动应用发现输出

初始化了 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:用excludehttp://指明明确要排除的类.

@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("http://初始化了 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 :

第三种方式实现org.springframework.core.type.filter.TypeFilter,然后也是ComponentScan去排除指定的注解。网上写的好的文章很多,这里不多说了。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:防火墙原理(防火墙原理配置顺序)
下一篇:Juniper SRX防火墙-目的NAT(二)(juniper交换机)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~