Spring条件注解@Conditional,SpringBoot中组合条件你知道吗?
共 2062字,需浏览 5分钟
· 2021-04-23
阅读本文大概需要 2.5 分钟。
导读:当我们构建一个 Spring 应用的时候,有时我们想在满足指定条件的时候才将某个 bean 加载到应用上下文中, Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解,我们可以通过 @Conditional 注解来实现这类操作。
@Conditional 元注解源码
Conditional 接口源码
Spring Boot使用的所有Condition实现的基础。提供合理的日志记录,以帮助用户诊断要加载的类。
都可以应用在 TYPE 上,也就是说,Spring 自动扫描的一切类 (@Configuration, @Component, @Service, @Repository, or @Controller) 都可以通过添加相应的 @ConditionalOnXxxx 来判断是否加载
都可以应用在 METHOD 上,所以有 @Bean 标记的方法也可以应用这些注解
都是用了 @Conditional 注解来标记,OnBeanCondition 等自定义 Condition 还是实现了 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 类型的类,大家可以打开自行看看
推荐阅读:
Spring Boot 集成 WebSocket,轻松实现信息推送!
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
朕已阅