springboot中bean的排除

此贴用来记录开发遇到的问题哈
背景:

我在做springboot项目b,项目b依赖了项目a,但a中的某个配置类aConfig不是我想要的配置,但又不能改动依赖中的代码,于是我要在b中自定义一个配置类bConfig,并且让aConfig失效,于是就要排除依赖中的配置类

实现:

注:springboot怎么扫描bean以及怎么排除bean网上很多帖子已经很详细咯

springboot是怎样扫描到依赖中的类的?

想要让springboot不加载某个类,需要知道springboot是如何找到类并且装配的。默认情况下,springboot会将主启动类所在包作为扫描路径,该包及该包所有子包都将被扫描。当项目b依赖了其他项目比如a,很有可能包名不一致,那么springboot就扫不到a中的类,此时,我们有几种方式可以解决,

第一种,在当前项目的主启动类或者某个配置类上加包扫描,包路径指定为依赖所在包路径;

第二种,项目a中的配置类定义为自动配置类,
在spring.factories文件中配置

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.your.package.autoconfigure.A1AutoConfiguration,\
com.your.package.autoconfigure.A2AutoConfiguration,\

该属性指定的类将会被spring自动加载,但我们不一定会把a中的所有类都设为自动配置类,我们可以将少数的配置类设为自动配置类,然后在这几个配置类上进行包扫描,扫描指定的包路径,使这些路径下的类也被扫描到,如:

@Configuration
@ComponentScan({"com.your.package", "com.his.package"})
@EnableConfigurationProperties({AProperties.class})
public class AAutoConfiguration {
	public AAutoConfiguration() {
	}
}
如何指定排除某些类的加载?

首先,排除自动配置类可以通过配置SpringBootApplication注解中的exclude参数,exclude中的所有自动配置类都不会被自动加载。如下:

@SpringBootApplication(exclude = {
	DataSourceAutoConfiguration.class
    ,ClassYouWantToExclude.class

})
当要排除普通配置类时,可在主启动类上进行包扫描过滤,ComponentScan中有excludeFilters参数,通过配置该参数可指定某种过滤器ComponentScan.Filter来进行过滤,ComponentScan.Filter有几种类型
ANNOTATION,//注解
ASSIGNABLE_TYPE,//类
ASPECTJ,//
REGEX,//正则
CUSTOM;//
选择一种方式来过滤,此处选用直接指定类的过滤方式,如下:

@ComponentScan(excludeFilters  = {@ComponentScan.Filter(
    type = FilterType.ASSIGNABLE_TYPE
    , classes = {
            ClassYouWantToExclude.class
    })}
    , basePackages = {"com.your.package","com.his.package"}

)

排除失效的情况

当我在一个类进行了对aConfig的排除操作,但是另一个类指定的包扫描又指定扫描到了aConfig,那么,此处的排除操作将失效,aConfig类依然会被加载
解决方式:SpringBoot @CompentScan excludeFilters配置无效的解决方案

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值