Spring Boot条件注解的汇总:
注解 |
作用 |
判断依据 |
使用场景 |
@ConditionalOnBean |
容器中存在指定Bean时,被注解的配置或Bean定义生效 |
指定Bean在容器中存在 |
依赖其他已存在Bean时配置相关功能 |
@ConditionalOnCheckpointRestore |
在特定检查点恢复相关条件满足时生效 |
满足检查点恢复条件 |
Spring Boot内部特定恢复机制场景 |
@ConditionalOnClass |
类路径下存在指定类时,相关配置或Bean定义生效 |
指定类在类路径中存在 |
确保依赖类存在才进行配置 |
@ConditionalOnCloudPlatform |
根据运行的云平台判断条件是否满足 |
处于指定云平台环境 |
针对不同云平台进行差异化配置 |
@ConditionalOnExpression |
基于SpEL表达式结果判断条件是否满足 |
SpEL表达式计算结果为真 |
根据灵活的表达式逻辑决定配置 |
@ConditionalOnJava |
依据当前运行的Java版本判断条件 |
运行的Java版本符合指定范围 |
兼容不同Java版本的配置 |
@ConditionalOnJndi |
JNDI中存在指定名称时,配置或Bean定义生效 |
JNDI存在指定名称 |
依赖JNDI资源进行配置 |
@ConditionalOnMissingBean |
容器中不存在指定Bean时,配置或Bean定义生效 |
指定Bean在容器中不存在 |
容器缺少特定Bean时提供默认配置 |
@ConditionalOnMissingClass |
类路径下不存在指定类时,配置或Bean定义生效 |
指定类在类路径中不存在 |
类路径缺少特定类时进行替代配置 |
@ConditionalOnNotWarDeployment |
应用不是以WAR包形式部署时,配置或Bean定义生效 |
非WAR包部署形式 |
非WAR包部署场景下的配置 |
@ConditionalOnNotWebApplication |
应用不是Web应用程序时,配置或Bean定义生效 |
非Web应用程序 |
非Web应用场景下的配置 |
@ConditionalOnProperty |
根据配置文件中的属性值判断条件 |
配置属性值满足要求 |
依据配置文件灵活启用或禁用配置 |
@ConditionalOnResource |
类路径下存在指定资源时,配置或Bean定义生效 |
类路径存在指定资源 |
依赖特定资源存在的配置 |
@ConditionalOnSingleCandidate |
容器中指定类型的Bean只有一个候选时,配置或Bean定义生效 |
指定类型Bean为单例 |
确保单例Bean存在时的配置 |
@ConditionalOnThreading |
基于线程相关条件判断 |
满足线程相关条件 |
Spring Boot内部特定线程场景 |
@ConditionalOnWarDeployment |
应用是以WAR包形式部署时,配置或Bean定义生效 |
WAR包部署形式 |
WAR包部署场景下的配置 |
@ConditionalOnWebApplication |
应用是Web应用程序时,配置或Bean定义生效 |
Web应用程序 |
Web应用场景下的配置 |
@ConditionalOnBean
意义:表示当容器中存在指定类型或满足特定条件的 Bean 时,才会使被注解的配置生效或创建对应的 Bean。
使用示例:
@Configuration
@ConditionalOnBean(name = "userService")
public class SpecialConfig {
}
@ConditionalOnClass
意义:当类路径下存在指定的类时,被注解的配置或 Bean 定义才会生效。用于确保依赖类存在时才进行相关配置。
使用示例:
@Configuration
@ConditionalOnClass(name = "org.example.SomeService")
public class FeatureConfig {
}
@ConditionalOnExpression
意义:基于 SpEL(Spring 表达式语言)表达式的结果来判断条件是否满足。可以灵活地根据表达式逻辑决定配置是否生效。
使用示例
@Configuration
@ConditionalOnExpression("${app.debug:false} == true")
public class DebugConfig {
}
@ConditionalOnJava
意义:根据当前运行的 Java 版本来判断条件是否满足,用于兼容不同 Java 版本的配置。
使用示例:
@Configuration
@ConditionalOnJava(range = ConditionalOnJava.Range.EQUAL_OR_NEWER, value = JavaVersion.EIGHT)
public class Java8PlusConfig {
}
@ConditionalOnJndi
意义:当 JNDI(Java 命名和目录接口)中存在指定的名称时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnJndi(name = "java:comp/env/jdbc/myDS")
public class JndiDataSourceConfig {
}
@ConditionalOnMissingBean
意义:当容器中不存在指定类型或满足特定条件的 Bean 时,才会使被注解的配置生效或创建对应的 Bean。和@ConditionalOnBean 相反。
使用示例:
@Configuration
@ConditionalOnMissingBean(UserService.class)
public class DefaultUserServiceConfig {
}
@ConditionalOnMissingClass
意义:当类路径下不存在指定的类时,被注解的配置或 Bean 定义才会生效。和@ConditionalOnClass 相反。
使用示例:
@Configuration
@ConditionalOnMissingClass(name = "org.example.ExpensiveLibrary")
public class FallbackConfig {
}
@ConditionalOnNotWarDeployment
意义:当应用不是以 WAR 包形式部署时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnNotWarDeployment
public class NonWarDeploymentConfig {
}
@ConditionalOnNotWebApplication
意义:当应用不是 Web 应用程序时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnNotWebApplication
public class NonWebAppConfig {
}
@ConditionalOnProperty
意义:根据配置文件中的属性值来判断条件是否满足。可用于根据配置灵活启用或禁用配置。
使用示例:
@Configuration
@ConditionalOnProperty(name = "app.feature.enable", havingValue = "true")
public class FeatureEnableConfig {
}
@ConditionalOnResource
意义:当类路径下存在指定的资源(如文件、目录等)时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnResource(resources = "classpath:config/custom.properties")
public class CustomResourceConfig {
}
@ConditionalOnSingleCandidate
意义:当容器中指定类型的 Bean 只有一个候选(即单例)时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnSingleCandidate(UserService.class)
public class SingleUserServiceConfig {
}
@ConditionalOnThreading
意义:基于线程相关条件判断,Spring Boot 内部特定场景使用,应用开发中较少直接用。
使用示例:
@Configuration
@ConditionalOnThreading
public class ThreadingRelatedConfig {
}
@ConditionalOnWarDeployment
意义:当应用是以 WAR 包形式部署时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnWarDeployment
public class WarDeploymentConfig {
}
@ConditionalOnWebApplication
意义:当应用是 Web 应用程序时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnWebApplication
public class WebAppConfig {
}
@ConditionalOnCloudPlatform
意义:根据运行的云平台来判断条件是否满足,比如判断是否在特定云厂商(如 AWS、Azure 等)环境中运行,以决定配置是否生效。
使用示例:
@Configuration
@ConditionalOnCloudPlatform(value = CloudPlatform.AWS)
public class AwsSpecificConfig {
}
@ConditionalOnCheckpointRestore
意义:Spring Boot 特定场景下,基于检查点恢复相关条件判断,一般用于 Spring Boot 内部或特定恢复机制场景 ,应用开发中较少直接使用。
使用示例:
@Configuration
@ConditionalOnCheckpointRestore
public class RestoreRelatedConfig {
}