关于 @EnableAutoConfiguration 的一点儿粗浅认识

我们通过 @EnableAutoConfiguration 注解来指定当前应用(springboot 项目)是可以自动配置的

那都需要自动配置些什么呢?

这里我们要提一下 spring-boot-autoconfigure.jar,通过该 jar 提供的很多自动配置的配置类,让我们在使用 springboot 的时候更加简单方便(省去了很多麻烦的配置),而那些自动配置的配置类是在 jar 包中的 META-INF/spring.factories 文件所体现的,如下图下:
在这里插入图片描述
"org.springframework.boot.autoconfigure.EnableAutoConfiguration=…"对应的类列表就是要进行自动配置的配置类(带 @Configuration 注解的类)。

其实,无论是 springboot 提供的 starter,还是第三方提供的 starter,还是我们自定义的 starter, 都是通过这个机制来实现 starter 中的配置类自动加载的。

那 springboot 是如何做到这一点的呢?

让我们从头开始捋(从 @SpringBootApplication 开始)吧!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从 @SpringBootApplication -> @EnableAutoConfiguration -> @Import({AutoConfigurationImportSelector.class}),这里起到关键作用是 AutoConfigurationImportSelector ,而关键中的关键就是该类中出现的 SpringFactoriesLoader ,我在这里引用《SpringBoot解密》中的一段儿话来说明 SpringFactoriesLoader 原本的用途。

SpringFactoriesLoader
属于 Spring 框架私有的一种扩展方案(类似于 Java 的 SPI 方案 java.util.ServiceLoad),其主要功能就是从指定的配置文件中(METF-INF/spring.factories)加载配置,spring.factories 是一个典型的 java
properties,配置的格式为 Key = Value 形式,只不过 Key 和 Value 都是java类型的完整类名(Full
qualified name),比如:
example.MyService=example.MyServiceImpl1,example.MyServiceImpl2
然后框架就可以根据某个类型作为 Key 来查找相对应的类型名称列表了。

在 @EnableAutoConfiguration 这个场景下(SpringFactoriesLoader 的用途稍微有些不同),SpringFactoriesLoader 要从当前应用 classpath 下所有 META-INF/spring.factories 文件中(例如:当前应用引入的 spring-boot-autoconfigure.jar、spring-boot-starter-xxx、xxx-spring-boot-starter 等等),以 org.springframework.boot.autoconfigure.EnableAutoConfiguration 作为查找的 Key,获取对应的所有配置类。然后,springboot 会自动将这些配置类中的「bean 定义」装载到 IoC 容器中。

OK,以上就是我对「自动配置」的一点儿粗浅认识了 ~~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cab5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值