SpringBoot注解 @Conditional

文章介绍了Spring框架中用于条件化配置的注解@ConditionalOnClass,特别是在Kafka集成时如何使用。当类路径下存在KafkaTemplate类时,Spring会自动创建MyTestbean。此外,文章还提到了其他条件注解如@ConditionalOnBean和@ConditionalOnExpression,这些注解帮助控制Bean的实例化基于特定条件。
摘要由CSDN通过智能技术生成

Spring中为Kafka提供了一个自动配置类

KafkaAutoConfiguration

在类上有一个注解@ConditionalOnClass

@Bean
@ConditionalOnClass(KafkaTemplate.class)
public class MyTest{
}

这个注解通俗的说就是Spring工程中引用了Kafka的包,存在KafkaTemplate 才会构建这个MyTest bean

官方解释:就是说只有在classpath下能找到kafkaTemplate类才会构建这个bean。

/**
 * {@link Conditional} that only matches when the specified classes are on the classpath.
 *
 * @author Phillip Webb
 */
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(OnClassCondition.class)
public @interface ConditionalOnClass {
 
   /**
    * The classes that must be present. Since this annotation is parsed by loading class
    * bytecode, it is safe to specify classes here that may ultimately not be on the
    * classpath, only if this annotation is directly on the affected component and
    * <b>not</b> if this annotation is used as a composed, meta-annotation. In order to
    * use this annotation as a meta-annotation, only use the {@link #name} attribute.
    * @return the classes that must be present
    */
   Class<?>[] value() default {};
 
   /**
    * The classes names that must be present.
    * @return the class names that must be present.
    */
   String[] name() default {};
 
}

其他类似注解:

	/**
     * 这里加了ConditionalOnBean注解,就代表如果city存在才实例化people
     */
    @Bean
    @ConditionalOnBean(name = "city")
    public People people(City city) {
        //这里如果city实体没有成功注入 这里就会报空指针
        city.setCityCode(301701);
        return new People("小小", 3, city);
    }

@Conditional(TestCondition.class)
这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,只是对该方法启用配置。
@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
@ConditionalOnNotWebApplication(不是web应用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值