本篇介绍下,如何通过springboot的自定义条件配置,控制Bean的创建
- 介绍下开发环境
- JDK版本1.8
- springboot版本是1.5.2
- 开发工具为 intellij idea(2018.2)
- 开发环境为 15款MacBook Pro
前言
很多时候,我们在公司用springboot作为基础框架开发项目的时候,会遇见创建某个Bean的时候,需要一些条件来作为前置,这时候,Spring默认的条件配置,已经不满足条件了,需要自定义条件配置,这时候我们可以通过条件配置接口,自定义规则来判断是否创建Bean
如何弄自定义条件配置呢?
这次,我们只在条件注解项目内的 @Conditional 配合 做演示,没看过上篇 SpringBoot条件配置的同学,可以点击这里
-
我们先创建三个普通的类,前置条件为,要创建SpecialC,需要SpecialA跟SpecialB同时存在IOC中
@Componentpublic class SpecialA { private static final Logger LOGGER = LoggerFactory.getLogger(SpecialA.class); public SpecialA() { LOGGER.info("创建 specialA"); }}@Componentpublic class SpecialB { private static final Logger LOGGER = LoggerFactory.getLogger(SpecialB.class); public SpecialB() { LOGGER.info("创建 specialB"); }}@Componentpublic class SpecialC { private static final Logger LOGGER = LoggerFactory.getLogger(SpecialC.class); public SpecialC() { LOGGER.info("创建 specialC"); }}
-
创建一个自定义配置的配置类
/** * 自定义的条件注解,根据自定义规则, * 配置是否生成某些bean * @author hexiaowu * */public class SpecialConditionAnnotion implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { ConfigurableListableBeanFactory beanFactory = context.getBeanFactory(); // 如果存在 specialA跟specialB 则返回true if(beanFactory.containsBean("specailA")&&beanFactory.containsBean("specialB")){ return true; } return false; }}
-
然后我们在启动类,增加如下配置
@SpringBootApplication(scanBasePackages = "com.example")public class DemoApplication{ public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } // 新增配置 @Bean // 指定自定义的条件判断注解Class @Conditional(SpecialConditionAnnotion.class) public SpecialC buildSpecialC(){ return new SpecialC(); }}
-
然后我们启动启动类,看到如下日志打印,说明条件配置生效了
2018-10-26 23:36:20.589 INFO 5602 --- [ main] c.e.c.specialCondition.SpecialA : 创建 specialA2018-10-26 23:36:20.591 INFO 5602 --- [ main] c.e.c.specialCondition.SpecialB : 创建 specialB2018-10-26 23:36:20.592 INFO 5602 --- [ main] c.e.c.specialCondition.SpecialC : 创建 specialC
关于条件配置
使用自定义条件配置,我们需要配置的东西很少,也就新增一个实现Condition接口的类
自定义条件配置官方文档地址如下:
结束语
本次介绍的,只是简单的自定义条件注解的配置,复杂的,需要各位看官自己根据业务来进行配置
项目源码,我已经上传到gitee
需要的朋友,可以自己点击查看
到这,文章就结束了!
以上,均为本人测试而得出的结果,可能会有出入,或者错误,欢迎指正
欢迎转载,请注明出处跟作者,谢谢!