【转】Spring Boot @Condition 注解,组合条件你知道吗
原文:https://www.cnblogs.com/FraserYu/p/11280420.html
上一篇文章 你应该知道的 @ConfigurationProperties 注解的使用姿势,这一篇就够了 介绍了如何通过 @ConfigurationProperties
注解灵活读取配置属性,这篇文章将介绍如何灵活配置 Spring Bean
写在前面
当我们构建一个 Spring 应用的时候,有时我们想在满足指定条件的时候才将某个 bean 加载到应用上下文中, 在Spring 4.0 时代,我们可以通过 @Conditional
注解来实现这类操作
我们看到 @Conditional
注解接收的参数是 extends Condition 接口的泛型类,也就是说,我们要使用 @Conditional
注解,只需要实现 Condition 接口并重写其方法即可:
看到接口的 matches 方法返回的是 boolean 类型,是不是和我们自定义 validation annotation 有些类似,都是用来判断是否满足指定条件。另外注意看,以上注解和接口都在 org.springframework.context.annotation
package 中
终于到了 Spring Boot 时代,在这个全新的时代,Spring Boot 在 @Conditional
注解的基础上进行了细化,无需出示复杂的介绍信 (实现 Condition 接口),只需要手持预定义好的 @ConditionalOnXxxx
注解印章的门票,如果验证通过,就会走进 Application Context 大厅
注解详解
Spring Boot 对 @Conditional
注解为我们做了细化,这些注解都定义在 org.springframework.boot.autoconfigure.condition
package 下
逐个打开这 13 个注解,我们发现这些注解上有相同的元注解:
从这些标记上我们可以了解如下内容:
都可以应用在 TYPE 上,也就是说,Spring 自动扫描的一切类 (@Configuration, @Component, @Service, @Repository, or @Controller) 都可以通过添加相应的
@ConditionalOnXxxx
来判断是否加载都可以应用在 METHOD 上,所以有 @Bean 标记的方法也可以应用这些注解
都是用了
@Conditional
注解来标记,OnBeanCondition 等自定义 Condition 还是实现了 Condition 接口的,换汤不换药,没什么神秘的,只不过做了更具象的封装罢了,来看类依赖图:
其实看这些注解字面意思已经能理解这些注解的含义,但是我们还是要说明具体的使用以及一些注意事项,我按照个人使用频次由高到低讲解:
@ConditionalOnProperty
毫无疑问这个注解是榜首
这个条件解释是: application.properties 或 application.yml 文件中 mybean.enable 为 true 才会加载 MyCondition 这个 Bean,如果没有匹配上也会加载,因为 matchIfMissing = true,默认值是 false。
@ConditionalOnBean 和 ConditionalOnMissingBean
有时候我们需要某个 Bean 已经存在应用上下文时才会加载,那么我们会用到 @ConditionalOnBean
注解:
与之相反,有时候我们需要某个 Bean 不存在于应用上下文时才会加载,那么我们会用到 @ConditionalOnMissingBean
注解
@ConditionalOnClass 和 @ConditionalOnMissingClass
不要嫌我废话,和上面的一样,只不过判断某个类是否存在于 classpath 中,这就不做过多说明了
@ConditionalOnExpression
如果我们有更复杂的多个配置属性一起判断,那么我们就可以用这个表达式了:
只有当两个属性都为 true 的时候才加载 MyModule,到这里要顺便揭晓上一篇文章 你应该知道的 @ConfigurationProperties 注解的使用姿势,这一篇就够了 灵魂追问 3,其中 :true
就是: 如果没有为该属性设置值,则为该属性设置默认值true, 其实这就是@Vaue
注解的规范,一切 SpEL 都可以应用在这里.
写到这,我常用的已经用完了,还要硬着头皮介绍其他几个内容
【转】Spring Boot @Condition 注解,组合条件你知道吗的更多相关文章
- Spring Boot @Condition 注解,组合条件你知道吗
上一篇文章 你应该知道的 @ConfigurationProperties 注解的使用姿势,这一篇就够了 介绍了如何通过 @ConfigurationProperties 注解灵活读取配置属性,这篇文 ...
- Spring Boot 常用注解汇总
一.启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documen ...
- 【SpringBoot】15. Spring Boot核心注解
Spring Boot核心注解 1 @SpringBootApplication 代表是Spring Boot启动的类 2 @SpringBootConfiguration 通过bean对象来获取配置 ...
- Spring Boot中注解@ConfigurationProperties
在Spring Boot中注解@ConfigurationProperties有三种使用场景,而通常情况下我们使用的最多的只是其中的一种场景.本篇文章带大家了解一下三种场景的使用情况. 场景一 使用@ ...
- Spring Boot常用注解总结
Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...
- 3个Spring Boot核心注解,你知道几个?
Spring Boot 核心注解讲解 Spring Boot 最大的特点是无需 XML 配置文件,能自动扫描包路径装载并注入对象,并能做到根据 classpath 下的 jar 包自动配置. 所以 S ...
- Spring Boot@Component注解下的类无法@Autowired的问题
title: Spring Boot@Component注解下的类无法@Autowired的问题 date: 2019-06-26 08:30:03 categories: Spring Boot t ...
- Spring boot 基于注解方式配置datasource
Spring boot 基于注解方式配置datasource 编辑 Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionF ...
- spring boot纯注解开发模板
简介 spring boot纯注解开发模板 创建项目 pom.xml导入所需依赖 点击查看源码 <dependencies> <dependency> <groupId& ...
随机推荐
- scrapy框架之代理的使用
首先我们检测ip是否可用: 1.对于免费代理的检测 #免费代理或不用密码的代理 url = 'http://httpbin.org/get' proxy = '127.0.0.0:8000' prox ...
- docker命令小全 this is my note.
服务器类型:linux =>centos 7.X以上版本 常用命令使用紫色加粗标明 1.安装yum-util(为配置docker安装时使用阿里镜像做准备):yum install -y yum- ...
- Android中使用ps命令查看进程PID
adb shell "ps | grep com.sina.weibo" 这个命令可以看到微博的应用线程信息. PID:进程号 PPID:父进程号 VSIZE:进程的虚拟内存大小 ...
- YUV和RGB格式单像素所占内存大小分析
图片的大小定 义为:w * h,宽高分别为w和h 一.YUV格式 1.1.YUV420格式存储方式:先Y,后V,中间是U.其中的Y是w * h,U和V是w/2 * (h/2)举例:如果w = 4,h ...
- 201671030110姜佳宇实验十四 团队项目评审&课程学习总结
作业 链接 作业所属课程 西北师范大学软件工程 作业要求 实验十四 团队项目评审&课程学习总结 作业目标 总结学习心得 本学期课程学习总结 解决实验一 软件工程准备任务5提出的问题: 问题一 ...
- Elasticsearch(一)基础入门
介绍 Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以前所未有的速度和规模,去探索你的数据. 它被用作全文检索.结构化搜索.分析以及这三个功能的组合: Elasticsearc ...
- D触发器的使用小结
请查看我的博客园文章,比较详细. https://www.cnblogs.com/CodeWorkerLiMing/p/11964046.html
- 编程语言与dsl
通用编程语言面向的是计算机通用功能: 即数据.计算.资源管理及数据与计算的组合方式: 数据与计算.计算与计算的组合方式是通用语言的问题域,是通用编程语言的在计算机硬件的基础上对问题解决通用描述方式: ...
- Java Polymorphism
Ability of an organism to take different shapes is polymorphism in bio world. A simplest definition ...
- int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restric mutex)
mutex:为了保护条件变量而存在的: cond:为了线程通信而存在的. 整个机制都是为了保护条件变量和线程间通信而存在的. pthread_cond_wait()函数一进入wait状态就会自动rel ...