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属性时(内容为空,同样也是有效的),则该配置生效。
本文介绍了Spring Boot中@ConditionalOnProperty注解的使用方法及其参数含义,通过示例展示了如何根据配置文件中的属性控制配置类的生效。

1261

被折叠的 条评论
为什么被折叠?



