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配置无效的解决方案
springboot中bean的排除相关推荐
- SpringBoot中Bean按条件装配
@Conditional条件装配 @Conditional是Spring Framework提供的一个核心功能注解,这个注解的作用是提供自动装配的条件限制,一般我们在用@Configuration,@ ...
- 如何正确控制springboot中bean的加载顺序总结
1.为什么需要控制加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功 ...
- Springboot中Bean的具体含义
在 Spring Boot 中,Bean 是一种由 Spring 容器管理的组件对象,实例化后可以在程序中使用. Bean 的具体含义可以从以下几个方面进行解释: 实例化对象:Bean 是一个普通的 ...
- Springboot中Bean的理解
一.Bean是什么 1.Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化): 2.凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属性: 3.规律:凡是 ...
- springboot中bean的几种初始化方法与销毁方法的执行顺序
初始化方法: 1.实现InitializingBean,重写afterPropertiesSet方法 2.直接使用initBean方法,需要指定init-method 3.使用@PostConstru ...
- SpringBoot中使用hikariCP
本篇文章主要实现SpringBoot中使用hikariCP: 一 .使用工具 1. JDK1.8 2. springToolSuit(STS) 3. maven 二.创建项目 1.首先创建 ...
- Springboot中手动new的对象无法注入交给Spring容器管理的原因及解决办法
Springboot中Bean的注入 我们都知道,Springboot可以使用方法级别注解(@Bean)和类级别注解(@Controller.@Component.@Service等)加包扫描的方式注 ...
- java filter注入,Spring-boot中Filter注入bean
Spring-boot中Filter注入bean 在spring中使用Filter的方式不用再多说,但是通常情况下我们在使用filter中都可能会注入部分配置的类或者部分具有特殊功能的业务类. 在这种 ...
- SpringBoot中@PropertySource和@ImportResource以及@Bean
@PropertySource 加载指定的配置文件 只能加载*.properties文件,不能加载yaml文件 新建一个user.properties user.nickname=张三 user.ag ...
最新文章
- mysql 事务 注意 优化_MySQL日常SQL优化注意事项
- python爬虫原理-干货|如何入门 Python 爬虫?爬虫原理及过程详解
- Java编程的逻辑 (29) - 剖析String
- 新建文件夹html文件,JS实现新建文件夹功能
- 客户想你死系列,哈哈哈设计师不容易啊! | 今日最佳
- BAT面试进阶:最全Memcached面试30题含答案
- phpexcel常见问题的解决办法
- c++ 一个简单的学生 类
- vue 列表更改排序,不刷新问题
- STM8学习笔记---Modbus通信协议简单移植
- 该怎么保持微信公众账号用户活跃度
- VLAN 主干道配置
- java中使用Calendar日期类获得下一个月有多少天
- 在spring security手动 自定义 用户认证 SecurityContextHolder
- html5微信录音文件,微信H5录音实现
- SpringBoot - Lombok使用详解1(基本介绍、安装配置、var和val)
- Min3D测试-在Android里面载入MMD模型-快速3D模型显示测试-By黑月君
- GodBlessYou: 让你的应用不再崩溃
- 指针、函数、指针函数和函数指针
- 2022年计算机领域EI检索国际学术会议参考列表(AI/CV/机器人等领域)