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

背景:

我在做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配置无效的解决方案

springboot中bean的排除相关推荐

  1. SpringBoot中Bean按条件装配

    @Conditional条件装配 @Conditional是Spring Framework提供的一个核心功能注解,这个注解的作用是提供自动装配的条件限制,一般我们在用@Configuration,@ ...

  2. 如何正确控制springboot中bean的加载顺序总结

    1.为什么需要控制加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功 ...

  3. Springboot中Bean的具体含义

    在 Spring Boot 中,Bean 是一种由 Spring 容器管理的组件对象,实例化后可以在程序中使用. Bean 的具体含义可以从以下几个方面进行解释: 实例化对象:Bean 是一个普通的 ...

  4. Springboot中Bean的理解

    一.Bean是什么 1.Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化): 2.凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属性: 3.规律:凡是 ...

  5. springboot中bean的几种初始化方法与销毁方法的执行顺序

    初始化方法: 1.实现InitializingBean,重写afterPropertiesSet方法 2.直接使用initBean方法,需要指定init-method 3.使用@PostConstru ...

  6. SpringBoot中使用hikariCP

    本篇文章主要实现SpringBoot中使用hikariCP:  一 .使用工具  1. JDK1.8  2. springToolSuit(STS)  3. maven  二.创建项目  1.首先创建 ...

  7. Springboot中手动new的对象无法注入交给Spring容器管理的原因及解决办法

    Springboot中Bean的注入 我们都知道,Springboot可以使用方法级别注解(@Bean)和类级别注解(@Controller.@Component.@Service等)加包扫描的方式注 ...

  8. java filter注入,Spring-boot中Filter注入bean

    Spring-boot中Filter注入bean 在spring中使用Filter的方式不用再多说,但是通常情况下我们在使用filter中都可能会注入部分配置的类或者部分具有特殊功能的业务类. 在这种 ...

  9. SpringBoot中@PropertySource和@ImportResource以及@Bean

    @PropertySource 加载指定的配置文件 只能加载*.properties文件,不能加载yaml文件 新建一个user.properties user.nickname=张三 user.ag ...

最新文章

  1. mysql 事务 注意 优化_MySQL日常SQL优化注意事项
  2. python爬虫原理-干货|如何入门 Python 爬虫?爬虫原理及过程详解
  3. Java编程的逻辑 (29) - 剖析String
  4. 新建文件夹html文件,JS实现新建文件夹功能
  5. 客户想你死系列,哈哈哈设计师不容易啊! | 今日最佳
  6. BAT面试进阶:最全Memcached面试30题含答案
  7. phpexcel常见问题的解决办法
  8. c++ 一个简单的学生 类
  9. vue 列表更改排序,不刷新问题
  10. STM8学习笔记---Modbus通信协议简单移植
  11. 该怎么保持微信公众账号用户活跃度
  12. VLAN 主干道配置
  13. java中使用Calendar日期类获得下一个月有多少天
  14. 在spring security手动 自定义 用户认证 SecurityContextHolder
  15. html5微信录音文件,微信H5录音实现
  16. SpringBoot - Lombok使用详解1(基本介绍、安装配置、var和val)
  17. Min3D测试-在Android里面载入MMD模型-快速3D模型显示测试-By黑月君
  18. GodBlessYou: 让你的应用不再崩溃
  19. 指针、函数、指针函数和函数指针
  20. 2022年计算机领域EI检索国际学术会议参考列表(AI/CV/机器人等领域)

热门文章

  1. chatgpt 提示词建议
  2. 开发生命周期与产品生命周期
  3. 纯前端表格控件SpreadJS以专注业务、提升效率赢得用户与市场
  4. Transcad学习——索引转换
  5. 论文详解笔记:Graph WaveNet for Deep Spatial-Temporal Graph Modeling
  6. Blink 自定义函数(UDX)
  7. python输入一个三位数_Python 三位一并法
  8. HTTP报文格式及WireShark抓包分析
  9. Mybatis-Mapper.xml输入输出映射
  10. 计算机继承意义,计算机的发明事实上是对人脑智力的继承和延伸