博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
@Conditional的使用及使用场景
阅读量:5146 次
发布时间:2019-06-13

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

@Conditional的使用

  • 作用:根据条件,决定类是否加载到Spring Ioc容器中,在SpringBoot中有大量的运用
  • 应用场景:在一些需要条件满足才是实例化的类中,使用此注解,我曾经在项目中需要根据不同的场景使用不同的mq中间件的时候使用过,在mq的实例化bean上,加上此注解,根据配置文件的不同,来决定这个bean是否加载至ioc容器中。

使用方法

  1. 实现Conditional接口, 实现matches方法。

    public class MqExistsCondition implements Condition{ @Override public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata)     {     Environment environment = context.getEnvironment();     //从这里获取配置文件中 active 的值,根据当前的active值决定是否加载类        String[] activeProfiles = environment.getActiveProfiles();     for (String active : activeProfiles) {         if(active.equals(ActiveEnum.open_active.getActive().toString())){             return true;         }     }     return false; }}
  2. 在需要判断条件的bean上,加上@Conditional(TestExistsCondition.class) 即可在满足条件的时候加载对应的类。

    @Bean    @Conditional(TestMqExistsCondition.class)    public TestBean getTestBean(){     TestBean testBean = new TestBean();     return testBean;    }

其他派生的的conditional

@ConditionalOnClass

​ 如果此class不存在

@ConditionalOnMissingBean

​ 只有对应的ban在系统中都没有被创建,它修饰的初始化代码块才会执行,用户自己手动创建的bean优先

@ConditionalOnBean

仅仅在当前上下文中存在某个对象时,才会实例化一个Bean。

@ConditionalOnClass

​ 某个class位于类路径上,才会实例化一个Bean

@ConditionalOnExpression

​ 当表达式为true的时候,才会实例化一个Bean。

比如:

@ConditionalOnExpression("true")

@ConditionalOnExpression("${my.controller.enabled:false}")

@ConditionalOnMissingBean

​ 仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean

@ConditionalOnMissingClass

某个class类路径上不存在的时候,才会实例化一个Bean

@ConditionalOnNotWebApplication

​ 不是web应用

转载于:https://www.cnblogs.com/liangluojun/p/10295702.html

你可能感兴趣的文章
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
一种简单的数据库性能测试方法
查看>>
如何给JavaScript文件传递参数
查看>>
Hadoop HBase概念学习系列之物理视图(又名为物理模型)(九)
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
ExtJS 4.2 业务开发(一)主页搭建
查看>>
webpack Import 动态文件
查看>>
电脑没有安装iis,但是安装了.NET环境,如何调试网站发布的程序
查看>>
【Mac + GitHub】之在另一台Mac电脑上下载GitHub的SSH链接报错
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
Java NIO系列教程(九) ServerSocketChannel
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
postgis几何操作函数集
查看>>
ACM题目————还是畅通工程
查看>>
CentOS7使用firewalld打开关闭防火墙与端口
查看>>
35. Search Insert Position(C++)
查看>>