Spring条件注解@Conditional,SpringBoot中组合条件你知道吗?
2021/4/15 10:57:40
本文主要是介绍Spring条件注解@Conditional,SpringBoot中组合条件你知道吗?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
导读:当我们构建一个 Spring 应用的时候,有时我们想在满足指定条件的时候才将某个 bean 加载到应用上下文中, Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解,我们可以通过 @Conditional 注解来实现这类操作。
@Conditional 元注解源码
Conditional 接口源码
我们看到 @Conditional 注解接收的参数是 extends Condition 接口的泛型类,也就是说,我们要使用 @Conditional 注解,只需要实现 Condition 接口并重写其方法即可:
简单找下Spring家族其他的案例实现SpringBootCondition
Spring Boot使用的所有Condition实现的基础。提供合理的日志记录,以帮助用户诊断要加载的类。
无意中在网上看到一种比较形象的理解:如果将Application Context 比作大厅,Spring Boot 在 @Conditional 注解的基础上进行了细化,无需出示复杂的介绍信 (实现 Condition 接口),只需要手持预定义好的 @ConditionalOnXxxx 注解印章的门票,如果验证通过,就会走进 Application Context 大厅
SpringBoot Condition 拓展实现
逐个打开这 13 个注解,我们发现这些注解上有相同的元注解
从这些标记上我们可以了解如下内容:
-
都可以应用在 TYPE 上,也就是说,Spring 自动扫描的一切类 (@Configuration, @Component, @Service, @Repository, or @Controller) 都可以通过添加相应的 @ConditionalOnXxxx 来判断是否加载
-
都可以应用在 METHOD 上,所以有 @Bean 标记的方法也可以应用这些注解
-
都是用了 @Conditional 注解来标记,OnBeanCondition 等自定义 Condition 还是实现了 Condition 接口的,换汤不换药,没什么神秘的,只不过做了更具象的封装罢了,来看类依赖图(简化的类图)
其实用法都大同小异,看了源码以后发现原理很简单,这里简单归纳下用法:
除了自己自定义Condition之外,Spring还提供了很多Condition给我们用
-
@ConditionalOnBean
仅仅在当前上下文中存在某个对象时,才会实例化一个Bean
-
@ConditionalOnClass
某个class位于类路径上,才会实例化一个Bean
-
@ConditionalOnExpression
当表达式为true的时候,才会实例化一个Bean
-
@ConditionalOnMissingBean
仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean
-
@ConditionalOnMissingClass
某个class类路径上不存在的时候,才会实例化一个Bean
-
@ConditionalOnNotWebApplication
不是web应用
-
@ConditionalOnProperty
指在配置里配置的属性是否为true,才会实例化一个Bean)
-
@ConditionalOnResource
如果我们要加载的 bean 依赖指定资源是否存在于 classpath 中,那么我们就可以使用这个注解
-
@ConditionalOnJndi
只有指定的资源通过 JNDI 加载后才加载 bean
-
@ConditionalOnCloudPlatform
只有运行在指定的云平台上才加载指定的 bean,CloudPlatform 是 org.springframework.boot.cloud 下一个 enum 类型的类,大家可以打开自行看看
到这里,你已经了解了如何灵活配置 bean,希望大家打开 IDE,自行查看这些注解,了解更多具体内容。(共勉:多看源码,学习大神的代码设计)
这篇关于Spring条件注解@Conditional,SpringBoot中组合条件你知道吗?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求