三、关于自动配置

前言
  • 解读@SpringBootApplication中讲到
  • @EnableAutoConfiguration 可以借助 SpringFactoriesLoader
  • 将标注了 @Configuration 的 JavaConfig 类 汇总并加载到最终的 ApplicationContext
  • 实际上,基于 @EnableAutoConfiguration 的自动配置功能拥有更加强大的调控能力
  • 通过配合比如基于条件的自动配置或者调整加载顺序
  • 我们可以对自动配置进行更加细粒度的调整和控制
基于条件的自动配置
  • 基于条件的自动配置来源于 Spring 框架中“基于条件的配置”这一特性

  • 在 Spring 框架中,我们可以使用 @Conditional 这个 Annotation 配合 @Configuration 或者 @Bean 等 Annotation

  • 来干预一个配置或者 bean 定义 是否能够生效

  • 其最终实现的效果或者语义类似于如下伪代码:

  • if(符合 @Conditional 规定的条件){
    加载当前配置(enable current Configuration)或者注册当前bean定义;
    }

  • 要实现基于条件的配置,我们只要通过 @Conditional 指定自己的 Condition 实现类就可以了(可以应用于类型 Type 的标注或者方法 Method 的标注):
    @Conditional({MyCondition1.class, MyCondition2.class, …})

  • 最主要的是,@Conditional 可以作为一个 Meta Annotation 用来标注其他 Annotation 实现类,从而构建各色的复合 Annotation

  • 比如 SpringBoot 的 autoconfigure 模块就基于这一优良的革命传统,实现了一批 Annotation(位于 org.springframework.boot.autoconfigure.condition 包下)
    在这里插入图片描述

  • 有了这些复合 Annotation 的配合,我们就可以结合 @EnableAutoConfigurationn 实现基于条件的自动配置了。

  • SpringBoot 能够风靡,很大一部分功劳需要归功于它预先提供的一系列自动配置的依赖模块

  • 而这些依赖模块都是基于以上 @Conditional 复合 Annotation 实现的

  • 这也意味着所有的这些依赖模块都是按需加载的

  • 只有符合某些特定条件,这些依赖模块才会生效

  • 这也就是我们所谓的“智能”自动配置。

调整自动配置的顺序
  • 使用 @AutoConfigureBefore 或者 @AutoConfigureAfter 让当前配置或者组件在某个其他组件之前或者之后进行
  • 比如,假设我们希望某些 JMX 操作相关的 bean 定义在 MBeanServer 配置完成之后进行,那么我们就可以提供一个类似如下的配置:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值