美团 T8 级架构师剖析 Spring Boot 源码:日志、缓存、消息、Web 服务等
如果你在使用Sping Boot的过程中只是简单地“用",而不去思考其背后的实现逻辑与思想,即便用得再好,收获也是有限的-这样只能做到"手熟",并不能拥有“匠心"。更重要的是,如果不学习Spring Boot背后那些优秀的设计理念和实现方式,我们肯定不能真正用好Spring Boot。
学习Spring Boot的设计理念和实现方式除了能够让开发人员从“手熟”的境界跨入“匠心"的境界,还能够让开发人员在其他业务场景中触类旁通地找到更加优秀的解决方案。同时,开发人员也能够了解代码和项目背后的深层逻辑,这会为以后的工作带来诸多好处。因此,我在使用Spring Boot的过程中并未停留在“用”的层面,而是不断地开究、总结其源代码,发掘背后的优秀设计理念及实现方式。现在,通过通过这份源码手册深入研究一些方法和成果分享给大家。
这份源码手册页数太多,内容太多,没办法为大家全部展示出来,同时小编也把这份美团大佬的源码笔记整理成册,免费获取方式在文末!

第一部分准备篇

第二部分原理篇
本章围绕 Spring Boot 的核心功能展开,带大家从总体上了解 Spring Boot 自动配置的原理以及自动配置核心组件的运作过程。只有掌握了这些基础的组件内容及其功能,我们在后续集成其他三方类库的自动配置时,才能够更加清晰地了解它们都运用了自动配置的哪些功能。本章需重点学习自动配置原理、@EnableAutoConfiguration、@Import、ImportSelector、@Conditional 以及示例解析部分的内容。


第3章Spring Boot构造流程源码分析
本章内容重点围绕 SpringApplication 类的初始化过程展开,详细介绍了在初始化过程中Spring Boot 所进行的操作 : Web 应用类型推断、 入口类推断 、 默认的Application-Contextlnitializer 接口加载、默认的 ApplicationListener 加载、SpringApplication类的参数配置功能, 以及针对这些操作我们能够进行的自定义组件及配置。建议大家在学习的过程中可配合相应的实战练习,获得更好的学习效果。


第4章Spring Boot运行流程源码分析
本章重点围绕 Spring Boot 启动过程中 SpringApplication 类的 run 方法的执行流程进行讲解,并做了一些功能和知识点的拓展,其中重点为在此过程中的事件监听、初始化环境、容器的创建及初始化操作。


第三部分内置组件篇
第5章Spring Boot外化配置源码解析
本章重点介绍了 Spring Boot 中参数的传递过程和配置文件的加载,特别是基于 profile 的加载机制。而关于加载、默认配置、配置优先级等操作,都位于 ConfigFileApplicationListener类中,该类还是值得读者朋友花时间研究一下的。
实战部分通过一个简单的实例演示了部分原理的使用方法,大家可结合该实例来验证和使用更多的相关功能。

第6章Spring Boot Web应用源码解析
本章重点针对 Spring Boot 中 Web 应用的自动配置和 Spring MVC 的自动配置展开,并以Spring MVC 中的一些典型配置为例进行了源码讲解。


第7章Spring Boot内置Servlet容器源码解析
本章重点以内置omcat 为例讲解了 Spring Boot 中 Servlet 容器的初始化及启动,其实在这个过程中经历了许多过程,而每部分都可以拓展出很大篇幅,我们以学习思路为重点,相关知识点学习或温故为辅助。现在,读者朋友可针对其他Servlet容器的初始化过程进行验证性学习。


第8章Spring Boot数据库配置源码解析
本章重点介绍了 DataSourceAutoConfiguration 类和 Jdbc TemplateAutoConfiguration 类的 自 动 配置。 关于数据库的自动配置还有很多相关配置和功能实现 , 比 如JndiDataSource-AutoConfiguration 、 XADataSourceAutoConfiguration 、 DataSourceTransactionManagerAuto-Configuration 等, 感兴趣的朋友可以按照本章介绍的方法和思路进行源码的学习。


第9章Spring Boot消息源码解析
本章重点分析了 Spring Boot 中 JMS 和 ActiveMQ 的自动配置。ActiveMQ 很 好地实现了JMS 协议,同时又可以很方便地进行定制化实现。针对 JMS 的注解部分,Spring Boot 也提供了专门的自动配置类 JmsAnnotationDrivenConfiguration 进行一系列的默认配置。


第10章Spring Boot Cache源码解析
本章重点介绍了 Spring Boot中缓存的自动配置以及基于 ConcurrentHashMap 实现的最简单 的 缓 存 功 能 。 涉及的缓存实现都只是基于Java提供的数据结构(Collection 、ConcurrentHashMap) 存储来实现的。而在实战过程中,根据不同的场景会使用不同的三方缓存组件,比如 JCache、EhCache、Caffeine、 Redis 等。 但基本的实现原理一致,读者朋友可参照本章内容进行具体的分析学习。


第11章Spring Boot日志源码解析


第12章实战:创建Spring Boot自动配置项目
总结一下 starter 的工作流程 : Spring Boot 在启动时扫描项目所依赖的 jar 包,寻找包含spring .factories 文件的 jar 包;根据 spring .factories 配置加载自动配置的 Configuration 类;根据@Conditional 注解的条件, 进行自动配置并将 Bean 注入 Spring 容器。


第四部分外置组件篇
第13章Spring Boot单元测试


第14章Spring Boot打包部署解析
本章主要介绍了 Spring Boot 生成的 jar包文件结构、生成方式、启动原理等内容,同时也引入了不少新概念,比如 Active、Fat jar 等。由于篇幅所限,关于 Spring Boot 中对实现 Jarin Jar 的 JAR 协议扩展不再展开,感兴趣的读者可查看代码进行学习。


第15章Spring Boot应用监控解析


第16章Spring Boot Security支持
本章重点进行了在 Web Servlet 下 Spring Security 的自动配置源码解析。


总结
虽然源码有点晦涩难懂,但是我们还要坚持读下去,因为收获肯定是很大!
最后100%SpringBoot源码免费获取方式:一键三连这篇文章,然后加小助理VX:wjj2632646免费获取!
版权声明: 本文为 InfoQ 作者【Java架构追梦】的原创文章。
原文链接:【http://xie.infoq.cn/article/edb8be61617640676f56e9487】。未经作者许可,禁止转载。
评论