本篇介绍下,如何经过springboot的条件配置,控制Bean的建立html
不少时候,咱们在公司用springboot做为基础框架开发项目的时候,会碰见建立BeanB的时候,须要BeanA已经建立好了,也就是根据条件来判断,是否建立该BeanB,这边写个教程,给各位做参考java
此次,咱们只在同一个项目内的 @Configuration 配合 @Bean 作演示,实际状况下,比较推荐用类注解 @Component 配合条件注解使用,下面演示的,只是比较经常使用的一些条件配置注解,并不包含全部git
咱们先建立一个普通的spring-boot项目,记得添加web依赖,不然,项目不会后台运行web
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
建立一个测试条件配置的类(不跟启动类一个目录下,最好单首创建一个目录)spring
@Configuration public class SpecialBeanFactory { @Bean public A buildA(){ return new A(); } @Bean // 若是存在Bean A,则建立Bean B @ConditionalOnBean(A.class) public B buildB(){ return new B(); } @Bean // 目录下犹如包含E.class 则建立Bean C @ConditionalOnClass(E.class) public C buildC(){ return new C(); } @Bean @ConditionalOnMissingClass(value = "W") public D buildD(){ return new D(); } @Bean // 若是不存在Bean E 那么建立Bean F @ConditionalOnMissingBean(E.class) public F buildF(){ return new F(); } @Bean // 属性文件若是存在 key=hexiaowu value= nan 的则建立BeanH @ConditionalOnProperty(value = "hexiaowu",havingValue = "nan") public H buildH(){ return new H(); } }
而后咱们在启动下启动类,会看到以下日志springboot
2018-10-18 20:08:49.732 INFO 24960 --- [ main] com.example.conditionBase.vo.A : 建立 A 2018-10-18 20:08:49.733 INFO 24960 --- [ main] com.example.conditionBase.vo.B : 建立 B 2018-10-18 20:08:49.734 INFO 24960 --- [ main] com.example.conditionBase.vo.C : 建立 C 2018-10-18 20:08:49.735 INFO 24960 --- [ main] com.example.conditionBase.vo.D : 建立 D 2018-10-18 20:08:49.736 INFO 24960 --- [ main] com.example.conditionBase.vo.F : 建立 F
打印上面日志,说明条件配置生效了框架
使用条件配置,咱们须要配置的东西不多,也就新增条件配置注解ide
条件配置官方文档地址以下: 条件配置官方文档spring-boot
注解 | 使用 |
---|---|
@ConditionalOnBean | 若是注解内的Bean存在,那么则建立注解类或者方法返回的Bean |
@ConditionalOnClass | 若是注解内classpath下存在某个class,那么建立注解类或者方法返回的Bean |
@ConditionalOnMissingClass | 若是注解内classpath没有该class名称,那么建立注解类或者方法返回的Bean |
@ConditionalOnMissingBean | 若是注解内的Bean不存在,那么建立注解类或者方法返回的Bean |
@ConditionalOnProperty | 若是属性文件内,包含注解内对应的属性名称跟值,那么建立注解类或者方法返回的Bean |
注意: 在配合 @Bean
注解跟条件注解使用建立Bean的时候,须要注意的是, @Bean
注解是跟@Configuration
注解配合外部配置的,也就是跟 @ComponentScan
扫描有不一样的区别,扫描会有依赖(生成一个有向图的依赖,我的猜想,没具体研究过源码),可是 @Bean
却没有, 例如: 在配置注解 @Configuration
类下 建立B Bean,须要A Bean不存在,若是建立B Bean的方法在建立A Bean前面,那么B跟A都会建立,若是建立A在建立B前面,那边B则不会建立,须要注意,若是是经过扫描的,则不用担忧这点,工具
本次介绍的,只是比较经常使用的,并无介绍全,例如: 自定义条件配置,以及资源条件配置等,并未介绍,下篇介绍
项目源码,我已经上传到gitee
须要的朋友,能够本身点击查看 springboot条件配置
到这,文章就结束了!
以上,均为本人测试而得出的结果,可能会有出入,或者错误,欢迎指正
欢迎转载,请注明出处跟做者,谢谢!