Spring Boot 中的条件注解 (@Conditional) 是一个核心特性,它允许开发者根据特定条件来决定是否创建某个 Bean 或者执行某个配置。@Conditional 注解可以用于类或者方法上,当给定的条件满足时,相关的配置才会生效。
下面是一些常用的条件注解及其用法:
@Conditional
这是一个基础的条件注解,它需要一个 Condition 接口的实现类,当这个实现类的 matches 方法返回 true 时,被注解的组件才会被创建。
@Configuration
public class MyConfig {
@Bean
@Conditional(MyCondition.class)
public MyBean myBean() {
return new MyBean();
}
}
public class MyCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// 实现条件判断逻辑
return true; // 或者 false
}
}
@ConditionalOnBean
当指定的 Bean 在 Spring 容器中存在时,被注解的组件才会被创建。
@Bean
@ConditionalOnBean(name = "otherBean")
public MyBean myBean() {
return new MyBean();
}
@ConditionalOnMissingBean
当指定的 Bean 在 Spring 容器中不存在时,被注解的组件才会被创建。
@Bean
@ConditionalOnMissingBean
public MyBean myBean() {
return new MyBean();
}
@ConditionalOnClass
当指定的类在类路径上存在时,被注解的组件才会被创建。
@Bean
@ConditionalOnClass(name = "com.example.ExternalService")
public MyBean myBean() {
return new MyBean();
}
@ConditionalOnMissingClass
当指定的类在类路径上不存在时,被注解的组件才会被创建。
@Bean
@ConditionalOnMissingClass("com.example.ExternalService")
public MyBean myBean() {
return new MyBean();
}
@ConditionalOnProperty
当指定的配置属性满足特定条件时,被注解的组件才会被创建。
@Bean
@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
public MyBean myBean() {
return new MyBean();
}
@ConditionalOnResource
当指定的资源存在于类路径上时,被注解的组件才会被创建。
@Bean
@ConditionalOnResource(resources = "classpath:config/myconfig.properties")
public MyBean myBean() {
return new MyBean();
}
@ConditionalOnWebApplication
当应用是 Web 应用时,被注解的组件才会被创建。
@Bean
@ConditionalOnWebApplication
public MyBean myBean() {
return new MyBean();
}
@ConditionalOnNotWebApplication
当应用不是 Web 应用时,被注解的组件才会被创建。
@Bean
@ConditionalOnNotWebApplication
public MyBean myBean() {
return new MyBean();
}
这些条件注解使得 Spring Boot 的配置更加灵活和强大,可以根据不同的环境或条件来定制化配置。