Springboot Condition 注解 和EnableAutoConfiguration

1 EnableAutoConfiguration

如果我们想自己写一个框架,并希望springboot加载时可以将我们自己框架的一些配置加载,那么该怎么做呢。

肯定不能直接让用户在 scanBasePackages 中将我们的包加进去。

这里我们需要用到@EnableAutoConfiguration 注解,这个注解的是自动配置,如果做到自动配置呢?

springboot 在启动是会扫描所有路径下的   META-INF/spring.factories 文件,找到该文件下 key为 

org.springframework.boot.autoconfigure.EnableAutoConfiguration,然后会自动加载value 对应对的class 类。 

具体文件路径如下:

然后我们看下spring.factories 文件内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.test.MyConfig

MyConfig 内容:

public class MyConfig {
    public MyConfig(){
        System.out.println("myconfig 初始化");
    }
}

启动springboot,可以看到 控制台打印  myconfig 初始化

一般我们将这个自动配置的类都写到一个包含starter 中的项目里。

我们看一下springcloud erueka 中的自动配置jar 包

2 Condition 

它可以根据代码中设置的条件装载不同的bean,比如说当一个接口有两个实现类时,我们要把这个接口交给Spring管理时通常会只选择实现其中一个实现类,这个时候我们总不能使用if-else吧,所以这个@Conditional的注解就出现了。

  • @ConditionalOnMissingBean(name = “connectionFactory”)或者
  • @ConditionalOnMissingBean(annotation = EnableSyjRateLimit.class)根据注解等等骚操作都可以
  • @ConditionalOnMissingBean这个仅仅比1多了个Missing,啥意思呢,见名知意,就是不存在某个bean的时候实例化。
  • @ConditionalOnClass(存在某个类时,才会实例化一个Bean)
  • @ConditionalOnMissingClass(不存在某个类时,才会实例化一个Bean)
  • @ConditionalOnProperty(prefix = “syj”, name = “algorithm”, havingValue = “token”)这个就稍微复杂了一点,它的意思呢就是当存在配置文件中以syj为前缀的属性,属性名称为algorithm,然后它的值为token时才会实例化一个类。而且这个还有一个比较好的属性@ConditionalOnProperty(prefix = “syj”, name = “algorithm”, havingValue = “counter”, matchIfMissing = true)matchIfMissing的意思呢就是说如果所有的都不满足的话就默认实现,不管这个属性syj.algorithm是不是等于counter
  • @ConditionalOnJava(如果是Java应用)
  • @ConditionalOnWebApplication(如果是Web应用)

大致有一下几种:

自己实现:

public class MyCondition implements Condition {

    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return false;
    }
}

使用:

@Conditional(MyCondition.class)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值