当前位置 : 首页 » 文章分类 :  开发  »  Spring-@Conditional条件Bean

Spring-@Conditional条件Bean

@Conditional 条件Bean 笔记


@Conditional条件Bean

除了自己自定义Condition之外,Spring还提供了很多Condition给我们用
@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
@ConditionalOnNotWebApplication(不是web应用)

Spring4.x高级话题(四):条件注解@Conditional
https://juejin.im/entry/59f67c01518825603a37e400


匹配上下文中是否有某个注解

只能判断@Conditional注解所在的类/方法上是否存在其他注解,不能在整个spring上下文中判断

Spring Annotation based Condition Example(这篇文字特别好,简介清晰)
http://www.javarticles.com/2016/01/spring-annotation-based-condition-example.html

Spring高级装配之条件化创建Bean
https://www.jianshu.com/p/0761ba179625


@ConditionalOnProperty根据配置变量决定是否创建bean

Spring boot中有个注解@ConditionalOnProperty,这个注解能够控制某个configuration是否生效。具体操作是通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值,如果该值为空,则返回false;如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。如果返回值为false,则该configuration不生效;为true则生效。

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnPropertyCondition.class})
public @interface ConditionalOnProperty {
    String[] value() default {}; //数组,获取对应property名称的值,与name不可同时使用
    String prefix() default "";//property名称的前缀,可有可无
    String[] name() default {};//数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用
    String havingValue() default "";//可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置
    boolean matchIfMissing() default false;//缺少该property时是否可以加载。如果为true,没有该property也会正常加载;反之报错
    boolean relaxedNames() default true;//是否可以松散匹配,至今不知道怎么使用的
}

配置Spring Boot通过@ConditionalOnProperty来控制Configuration是否生效
https://blog.csdn.net/dalangzhonghangxing/article/details/78420057

ConditionalOnProperty的使用
https://blog.csdn.net/u010002184/article/details/79353696


上一篇 TiDB

下一篇 MySQL-事务与锁

阅读
598
阅读预计2分钟
创建日期 2018-11-15
修改日期 2018-12-19
类别
百度推荐