Spring 注解

本文介绍了Spring Boot中@ConditionalOnProperty注解的使用方法及其参数含义,通过示例展示了如何根据配置文件中的属性控制配置类的生效。

Spring 注解

@ConditionalOnProperty

@ConditionalOnProperty的作用是判断一个Property属性,是否符合我们的条件,符合则让该注解修饰的类或者方法生效,否则不生效。
我们在Spring Boot中可以通过@ConditionalOnProperty来控制Configuration配置类是否生效。

ConditionalOnProperty注解的源码。

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnPropertyCondition.class})
public @interface ConditionalOnProperty {
	//数组,获取对应property名称的值,与name不可同时使用
    String[] value() default {}; 
 
 	//property名称的前缀,可有可无
    String prefix() default "";
 
 	//数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用
    String[] name() default {};
 
 	//可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置
    String havingValue() default "";
 
 	//缺少该property时是否可以加载。如果为true,没有该property也会正常加载;反之报错
    boolean matchIfMissing() default false;
 
}

Demo:

1、在配置文件添加一个属性,用来控制配置是否生效

#是否开启配置文件
open.Configuration=true

2、创建一个bean类

@Data
public class Student {

    private String name;
    
    private String age;
}

3、创建一个配置类,注册Student的bean

@Configuration
@ConditionalOnProperty(name = "open.Configuration",havingValue = "true")
public class TestConfig {

    @Bean
    public Student student(){
        Student student=new Student();
        System.out.println("-------Student类初始化-------");
        return student;
    }
}

流程:通过@ConditionalOnProperty的两个属性name以及havingValue来实现,其中name用来从application.properties中读取某个属性值。
如果该值为空,则直接返回false,不让配置类生效。如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。

如果只使用@ConditionalOnProperty的name属性,那么当配置文件中只要出现name属性时(内容为空,同样也是有效的),则该配置生效。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值