首页 > 编程语言 > 详细

SpringBoot内置条件注解

时间:2021-04-02 15:07:10      阅读:34      评论:0      收藏:0      [点我收藏+]

SpringBoot 内置的成品条件注解

SpringBoo中常用的内置的注解主要以下:

1. @ConditionalOnProperty()			指定的属性是否有指定的值
2. @ConditionalOnBean()				当SpringIoC容器内存在指定Bean的条件
3. @ConditionalOnClass
4. @ConditionalOnExpression		基于SpEL表达式作为判断条件
5. @ConditionalOnjava				 基于JVM版本作为判断条件
6. @ConditionalOnJndi				 在JNDI存在时查找指定的位置
7. @ConditionalOnMissingBean	当SpringIoC容器内不存在指定Bean的条件
8. @ConditionalOnMissingClass	当SpringIoC容器内不存在指定Class的条件
9. @ConditionalOnNotWebApplication	当前项目不是Web项目的条件
10. @ConditionalOnResource		类路径是否有指定的值
11. @ConditionalOnSingleCandidate	当指定Bean在SpringIoc容器内只有一个,或者虽然有多个但是指定首选的Bean
12. @ConditionalOnWebApplication	当前项目是Web项目的条件

下面举两个示例

@ConditionalOnProperty()

该注解有三个参数,分别是: value, havingValue, matchIfMissing,其中value是元类,havingValue是值,matchIfMissing用来处理如果没有找到对应Bean的情况下,默认使用的Bean,该参数的缺省值是false.

举个例子:目前我们有三个类,分别是:Hero,Hero1,Hero2,在配置文件中配置hero.conditional的值,当配置文件中的设置的为hero1的时候,则返回一个Hero1的实例对象;为hero2的时候,则返回一个Hero2的实例对象,如果都匹配不上的话,则返回一个Hero对象。

  • application.properties
hero.conditional=ethan
  • HeroConfiguration
@Configuration
public class HeroConfiguration {

    @Bean
    @ConditionalOnProperty(value = "Hero1.class", havingValue = "hero1")
    public ISkill hero1() {
        return new Hero1();
    }

    @Bean
    @ConditionalOnProperty(value = "Hero2.class", havingValue = "hero2")
    public ISkill hero2() {
        return new Hero2();
    }

    @Bean
    @ConditionalOnProperty(value = "Hero.class", matchIfMissing = true)
    public ISkill hero() {
        return new Hero();
    }
}

@ConditionalOnBean()

有一个MySQL类,是通过配置类DatabaseConfiguration注入到容器中,可以在@Bean中添加一个条件注解,只有当MySQL这个类存在的时候才能注入到容器中,否则不能注入。

  • DatabaseConfiguration
@Configuration
public class DatabaseConfiguration {

    @Value("${mysql.ip}")
    private String ip;

    @Value("${mysql.port}")
    private String port;

    @Bean
    public IConnect mysql() {
        return new MySQL(ip, port);
    }
}

当容器有 mysql这个bean的时候,HeroConfiguration才会将hero1加载到容器中

@Configuration
public class HeroConfiguration {
    @Bean
    @ConditionalOnBean(name = "mysql")
    public ISkill hero1() {
        return new Hero1("gabriel", 18);
    }
}

如果将DatabaseConfiguration中的@Bean去除掉,则启动就会报错

SpringBoot内置条件注解

原文:https://www.cnblogs.com/xlucky/p/14610058.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!