目录
前言
在开发过程中,我们又没有发现我们添加配置文件后, 一些配置类便生效了,更改一些配置文件,这个配置类又不起作用了呢?比如s w a g g e r的a p i文档?一个false,一个true就能控制他是否生效?是不是很神奇?
这里我们所要说的@ C o nditional On Property就能够实现这一功能?想要了解具体如何实现,就跟这我一起来学习一下吧!
如何使用
/**
* 计算耗时注解的实际计算过程方法
*/
@ConditionalOnProperty(name = "aspect.flag",havingValue = "true")
@Aspect
@Component
public class CostTimeAspect {
这里可以看到两个属性,name和havingValue,具体是什么含义呢? name会查找我们的application.yml文件中对应的aspect.flag对应的值,然后拿到值和havingValue中的值做对比,当两者相等返回true,配置生效,当不一致返回false,则配置不生效。
注意,如果name为空则返回false,配置类也是不生效的!
解析源码
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
String[] value() default {};
String prefix() default "";
String[] name() default {};
String havingValue() default "";
boolean matchIfMissing() default false;
}
数组value,获取对应的property名称的值,他和name属性不能够同时出现使用
配置属性名称的前缀prefix,比如spring.cloud
数组name,配置属性完整名称或者一部分名称。他可以和prefix组合使用,组成完整的配置属性名称。但是他不可以和数组value一起使用。
给定的值havingValue,他与数组name组合一起使用,比如获取的name属性值和havingValue给定的值是否相同,相同的结果才可以加载配置,否则不会加载配置。
matchIfMissing 表示缺少了该配置属性是否可以加载,如果为true,没有这一配置属性时也会正常加载;反过来就不会生效。
总结
以上总结了Conditional On Property的使用及源码解析,到这里就算完成了,希望对大家有所帮助!
欢迎大家关注我的公众号《coder练习生》