引言
Spring Boot 的条件注解(Conditional Annotations)是自动配置的核心机制之一。它们允许开发者根据特定的条件动态决定是否加载某个 Bean 或配置类,从而实现灵活的'按需配置'。本文将系统梳理所有常用的条件注解,结合代码示例说明其作用与使用场景。
一、条件注解的核心机制
元注解:@Conditional 作为所有条件注解的基础,通过实现 Condition 接口的 matches() 方法进行条件判断。若条件满足,则 Bean 或配置类生效;否则跳过。
示例:自定义条件类检查 JdbcTemplate 是否存在
public class JdbcTemplateCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return ClassUtils.isPresent("org.springframework.jdbc.core.JdbcTemplate", context.getClassLoader());
}
}
二、Spring Boot 内置条件注解详解
Spring Boot 基于 @Conditional 扩展了以下常用注解,覆盖了大多数自动化配置场景。
1. @ConditionalOnClass 和 @ConditionalOnMissingClass
- 作用:根据类路径中是否存在指定类来决定是否生效
- 典型场景:自动配置类中检查依赖库是否存在
- 示例:当项目中引入 Hibernate 时,自动配置 JPA 相关 Bean
@Configuration
@ConditionalOnClass({DataSource.class, EntityManager.class})
public class JpaAutoConfiguration {
// 当类路径存在 DataSource 和 EntityManager 时生效
}
2. @ConditionalOnBean 和 @ConditionalOnMissingBean
- 作用:根据容器中是否存在指定 Bean 来决定是否生效
- 典型场景:避免重复注册 Bean,或为默认 Bean 提供自定义覆盖
- 示例:当用户未自定义 DataSource 时,注册默认数据源
@Bean
@ConditionalOnMissingBean(DataSource.class)
DataSource {
();
}


