博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot自定义条件注解配置
阅读量:6872 次
发布时间:2019-06-26

本文共 2401 字,大约阅读时间需要 8 分钟。

hot3.png

本篇介绍下,如何通过springboot的自定义条件配置,控制Bean的创建

  • 介绍下开发环境
    • JDK版本1.8
    • springboot版本是1.5.2
    • 开发工具为 intellij idea(2018.2)
    • 开发环境为 15款MacBook Pro

前言

很多时候,我们在公司用springboot作为基础框架开发项目的时候,会遇见创建某个Bean的时候,需要一些条件来作为前置,这时候,Spring默认的条件配置,已经不满足条件了,需要自定义条件配置,这时候我们可以通过条件配置接口,自定义规则来判断是否创建Bean


如何弄自定义条件配置呢?

这次,我们只在条件注解项目内的 @Conditional 配合 做演示,没看过上篇 SpringBoot条件配置的同学,可以点击这里

  1. 我们先创建三个普通的类,前置条件为,要创建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");    }}
  2. 创建一个自定义配置的配置类

    /** *  自定义的条件注解,根据自定义规则, *  配置是否生成某些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;    }}
  3. 然后我们在启动类,增加如下配置

    @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();	}}
  4. 然后我们启动启动类,看到如下日志打印,说明条件配置生效了

    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 需要的朋友,可以自己点击查看

到这,文章就结束了!

以上,均为本人测试而得出的结果,可能会有出入,或者错误,欢迎指正

欢迎转载,请注明出处跟作者,谢谢!

转载于:https://my.oschina.net/u/2278977/blog/2253179

你可能感兴趣的文章
解决oracle_4031错误的方法
查看>>
C# Out,Ref 学习总结
查看>>
CentOS 7.4如何安装Python3
查看>>
instanceof
查看>>
activity的四种模式
查看>>
z-index
查看>>
git 和github
查看>>
Vue的路由
查看>>
RESTful API
查看>>
linux共享windows资料
查看>>
前端UI框架总结
查看>>
( component 标签元素,及其 :is 属性 )的使用样例(组件切换的一个简单样例,不过,最好使用动画来实现组件的切换)...
查看>>
这7个人生捷径,一定不要走!
查看>>
Koa2+Mysql搭建简易博客
查看>>
Atom 初识
查看>>
Servlet、Filter和Listener
查看>>
高中数学运算能力训练题【基础中阶高阶辅导】
查看>>
插件就是生产力——那些不能错过的XCode插件们
查看>>
Python打造一个在线G代码生成器
查看>>
ionic开发-怪癖001(http请求 android下无法正常运行)
查看>>