文章目录
- 一、条件注解
- 二、@Conditional
- 1、使用方法
- 2、示例
一、条件注解
条件注解的作用是给需要装载的Bean增加一个条件判断。只有满足条件才会装在到IoC容器中。而这个条件可以由自己去完成的,可以通过重写Condition接口重写matches()方法去实现自定义的逻辑。所以说这个注解增加了对Bean装载的灵活性。
- @Conditonal:是一个元注解(meta-annotation),用于定义条件化的bean创建
- @ConditionalOnBean:当指定的bean存在时,才会注册当前bean。
- @ConditionalOnMissingBean:当指定的bean不存在时,才会注册当前bean。
- @ConditionalOnClass:当指定的类在类路径上可用时,才会注册当前bean。
- @ConditionalOnMissingClass:当指定的类在类路径上不可用时,才会注册当前bean。
- @ConditionalOnProperty:当指定的属性具有指定的值时,才会注册当前bean。
二、@Conditional
1、使用方法
- 自定义条件类
需要实现org.springframework.context.annotation.Condition接口或继承org.springframework.context.annotation.Condition的某个实现类(如OnPropertyCondition、OnBeanCondition等)。 实现Condition接口需要覆盖matches(ConditionContext, AnnotatedTypeMetadata)方法,这个方法会返回一个布尔值,表示是否满足条件。 - 在@Bean方法或@Configuration类上使用@Conditional
可以将自定义的条件类作为@Conditional的值,或者直接使用Spring提供的条件注解(如@ConditionalOnProperty、@ConditionalOnBean等)。
2、示例
- 自定义条件类
public class MyCustomCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { // 这里可以根据需要编写条件判断逻辑 // 例如,检查某个配置属性是否存在或某个bean是否已经定义 // ... return true; // 假设这里总是满足条件 }
}
- 在@Bean方法上使用@Conditional
@Configuration
public class MyConfig { @Bean @Conditional(MyCustomCondition.class) public MyBean myBean() { return new MyBean(); }
}