条件注解分类

常见的@Conditionalxxx开头的注解我们称之为条件注解,常见的条件注解有

  • class条件注解:@ConditionalOnClass
  • bean条件注解:@ConditionalOnBean
  • 属性条件注解:@ConditionalOnProperty

这几个注解通常会结合使用,一般都是在配置类中使用,SpringBoot各种xxxxAutoCconfiguration都用到了这些注解,这也是SpringBoot自动装配的重要工具。这篇博文主要说一下@ConditionalOnProperty属性条件注解。

简单来讲,一般是在配置类上或者是@Bean修饰的方法上,添加此注解表示一个类是否要被Spring上下文加载,若满足条件则加载,若不满足条件则不加载。

我们在application.properties中配置的各种配置,添加配置之后即生效,就是这么控制的。

主要说一下这个属性matchIfMissing,该属性为true时,配置文件中缺少对应的value或name的对应的属性值,也会注入成功。

app.name=tom

配置类为

@ConditionalOnProperty(prefix = "app",name="name",matchIfMissing =  false)
@Configuration
public class ConfigureOne {

    public ConfigureOne() {
        System.out.println("--------构造ConfigureOne---------");
    }
}
不配置havingValue的值

1.假如没有配置这个name的配置
1.1@ConditionalOnProperty(prefix = “app”,name=“name”,matchIfMissing = false)
假如没有配置这个name的配置,若matchIfMissing为false,则不会加载此配置类
假如配置了这个name的配置,若matchIfMissing为false,则会加载此配置类

1.2@ConditionalOnProperty(prefix = “app”,name=“name”,matchIfMissing = true)
假如没有配置这个name的配置,若matchIfMissing为true,则仍会加载此配置类
假如配置了这个name的配置,若matchIfMissing为true,则会加载此配置类
总结,若未配置havingValue的值,matchIfMissing为true则无论是否有配置都会加载配置类,matchIfMissing为false,有配置加载类,无配置不加载类。

配置错误的havingValue的值

2.1@ConditionalOnProperty(prefix = “app”,name=“name”,havingValue = “name1”,matchIfMissing = false)
假如配置了错误的name值,若matchIfMissing为false,配置类不会加载
假如配置了正确的name值,若matchIfMissing为false,配置类会加载

2.2@ConditionalOnProperty(prefix = “app”,name=“name”,havingValue = “name1”,matchIfMissing = true)
假如配置了错误的name值,若matchIfMissing为true,配置类不会加载
假如配置了正确的name值,若matchIfMissing为true,配置类会加载
总结,只要配置了正确的havingValue值,无论matchIfMissing怎么设置,都会加载,只要配置的havingValue值不正确,无论
matchIfMissing怎么设置,都不会加载。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐