图解源码:Spring Boot 中自动配置原理

栏目: Java · 发布时间: 5年前

前言

最近一些朋友问到,之前的Dubbo源码系列还会不会更新.答案是,后续会升级 "Dubbo源码解析系列-plus" 版本.不要问我这个 plus 有多大,暂时还不会大到一只手无法掌控.

图解源码:Spring Boot 中自动配置原理

除了"源码解析"和"源码实战"外,今年的重点专题,也就是 图解源码 的快餐式专题.之前也发过一篇[ 图解源码 | MyBatis的Mapper原理 ]

如果要入门看源码,我认为最合适的就是 MybatisSpringBoot ,理由如下:

  1. 热门 .你和他们相处的时间甚至比和你女朋友相处的时间要长

  2. 主流程复杂度不大 .猜透这两个框架的原理和设计思路比猜对女孩子的心思简直简单太多了!

  3. 面试要问 . 像if else这种 "坦诚相待"的代码面试根本没人问,相反像SpringBoot这样做了大量自动配置的"犹抱琵琶半遮面"的设计面试总是一上来就要把原理扒个精光.

直入主题

说到SpringBoot,最先想到的往往是做了大量的自动配置.常见的自动配置有两种方式

1. @EnableXXX

比如 @EnableCaching

1@Target(ElementType.TYPE)
2@Retention(RetentionPolicy.RUNTIME)
3@Documented
4//导入指定配置类
5@Import(CachingConfigurationSelector.class)
6public @interface EnableCaching {
7    //...省略
8}

这种的好处是,当你依赖某个 starter 时,可以选择是否开启 starter 中帮你自动配置的一些设置.这个 @EnableXXX 从单词上看,就知道有开关的意思

2. META-INF/spring.factories

比如SpringBoot中默认的spring.factories

1# Auto Configure
2org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
3org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
4org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
5org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
6org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
7org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
8
9//省略

这种的好处是,当你依赖某个 starter 时,自动帮你开启 starter 中帮你自动配置的一些设置.

由于我在公司做的是基础架构这块,所以这两种我都有用到,当然第二种用得比较多,因为人家都依赖你的 starter 了,更多的时候是想要你完成全套操作.那么我们就来讲讲,这个自动配置是怎么做的

图解源码

图解源码:Spring Boot 中自动配置原理

简单文字解说:

首先要知识普遍一下,比如我图中红色框起来的是什么意思呢?那么首先你就要了解 ImportSelector 是干嘛的了

 1//自定义逻辑返回需要导入的组件
 2public class MyImportSelector implements ImportSelector {
 3
 4    /**
 5     * @param importingClassMetadata 当前标注@Import注解的类的所有注解信息
 6     * @return 导入到容器中的组件全类名
 7     */
 8    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
 9        return new String[]{"com.toby.register.bean.Colour"};
10    }
11}

说白了就是把组件的全类名给我,我帮你初始化这个多个bean.和你在spring的xml中配置bean,是一个意思.区别就在于,这种方式能够在代码运行中配置创建bean.所以我们总结一下,这个自动配置的原理究竟是怎么样的

1.启动main函数,加载 @SpringBootApplication

2. @SpringBootApplication 会拿到 META-INF/spring.factories 中需要自动配置的类的全名

3.把自动配置的类全名放入 ImportSelector 中,从而创建了自动配置类,根据自动配置类中的逻辑,进行相应的自动配置

写在最后

肥朝没有太多的花言巧语,如果你觉得本文对你有帮助,点击下方二维码加个关注,小手一抖朋友圈分享一波,亦或者是点个好看,都是对肥朝的支持.

图解源码:Spring Boot 中自动配置原理


以上所述就是小编给大家介绍的《图解源码:Spring Boot 中自动配置原理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创投42章经

创投42章经

曲凯 / 中信出版集团 / 2018-10-20 / 58.00

《创投42章经》是拥有百万粉丝的微信公众号“42章经”的精选文章合集,全书共分为心法、内功、招式和江湖传奇四部分。 在心法部分,读者可以学到一些创业与投资的底层思维方式;在内功部分,读者可以了解到,投资人看待一家公司经营状况的标准;在招式部分,读者可以看到作者作为一名资深投资人和睿智的观察者,对过去几年主要的公司、模式以及风口的判断;最后的江湖传奇部分,作者通过一些故事,帮助读者更好地理解当......一起来看看 《创投42章经》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具