SpringBoot成长记11:SpringBoot完结总结

SpringBoot成长记11:SpringBoot完结总结

file

前面10节的回顾

通过前面10节SpringBoot成长记的分析,你应该对SpringBoot的原理和设计思想有了很清晰的认识了。

最后这一节呢,我们将之前每一节最重要的知识点,提取出来一个总结。

第一节成长记1:你真的懂SpringBoot吗?

我们通过去官方文档寻找SpringBoot核心功能,教给大家两个思想,先脉络后细节的思想和注重思考的思想。

我自己对SpringBoot功能的思考:SpringBoot定义了新的web应用启动流程、SpringBoot核解决了Spring集成各种技术的复杂性。

file

第二节成长记2:从HelloWorld开始分析SpringBoot

我们从HelloWorld开始分析,分析了:SpringApplication的创建时核心组件图、SpringApplication Run方法的脉络

传授给大家2个思想

1)连蒙带猜的思想,根据方法名称,注释大体猜测方法和类的作用

2)抓大放小的思想,排除不重要的,分析最主要的。

file

第三节成长记3:SpringBoot扩展点之SpringApplicationRunListeners

SpringApplicationRunListeners的扩展

1)对流程的扩展方法 starting started running等

2)对配置文件的扩展方法environmentPrepared

3)对容器的扩展方法contextPrepared、contextLoaded

Listeners的扩展点设计

基于配置封装List,基于类封装不同阶段的扩展

基于观察者模式设计批量事件广播器、查询缓存降低O(n)复杂度

file

第四节成长记4:Run方法中配置文件的处理

我们分析了SpringBoot对对配置文件的解析,配置文件处理核心逻辑是创建配置文件对象、给配置文件对象设置一堆值,主要是各个配置文件。

而最关键的是配置文件的设计思考

1)配置文件需要查找:ResourceLoader(ClassLoader)

2)不同配置文件的解析:不同的Resolver

3)配置文件的内容封装:PropertySource+profile 泛型设计,存储不同格式内容

4)多个配置文件MutablePropertySources:List

file

第五节成长记5:Spring容器的创建

Spring容器的创建时的核心组件:reader和scanner、DefaultListableBeanFactory

reader和scanner的设计和作用:reader解析和增加BeanDefination、scanner查找和过滤BeanDefination

术语普及BeanDefinition、BeanDefinitionRegistry、InternalBean

从Reader和Scanner开始思考下Spring容器的抽象设计,Resource->ClassLoader->Reader/Scanner->BeanDefination的设计

file

第六节成长记6:准备SpringContext容器

prepareContext()的核心脉络:给容器Context和容器DefaultListableBeanFactory设置一些属性

触发的扩展点(非常重要的操作):applyInitializers()触发的扩展点操作、触发listener对容器扩展操作

术语普及BeanFactoryPostProcessor是什么?

beanFactory的一些属性补充(值得一提的操作):

1 )beanFactory.registerSingleton注册对象到容器的singletonObjects属性

2)BeanDefinitionLoader.load()补充BeanDefinition,这里补充了1个LearnSpringBootApplication 的BeanDefinition到beanFactory中

设置几个属性或者组件(不重要的操作)

file

第七节成长记7:容器的扩展操作是如何执行的

快速摸一下refreshCotenxt的脉络

invokeBeanFactoryPostProcessors之前的主要操作概括

术语普及BeanDefinitionRegistryPostProcessor是什么?

invokeBeanFactoryPostProcessors的核心脉络

1)if-else核心脉络逻辑:执行扩展方法1:postProcessBeanDefinitionRegistry()、执行扩展方法2:postProcessBeanFactory()

2)3个For循环的核心脉络逻辑:之前执行的是Spring内部定义好的一些BeanFactoryPostProcessor,
在执行了if-else逻辑后,其实扫描出来了ClassPath下更多第三方和其他的BeanFactoryPostProcessor

file

第八节成长记8:SpringBoot实现自动装配配置,第三方功能的扩展之处

1)SpringBoot实现自动装配配置

术语普及starter是什么?

核心的ConfigurationClassPostProcessor

思考:ConfigurationClassPostProcessor的添加BeanDefination的设计

2)第三方功能的扩展之处实现原理

思考:mybatis的Mapper如何被添加的?

基于ImportBeanDefinitionRegistrar的扩展

基于BeanFactoryPostProcessor的扩展

file

第九节成长记9:onRefresh如何启动内嵌的Tomcat容器的

1)快速看了 onRefresh启动内嵌tomcat前的操作

2)分析了onRefresh的核心脉络

3)思考了SpringBoot对web容器的抽象封装和设计

4)对new Tomcat进行了核心组件和脉络分析

5)分析了Connector基本创建和扩展设计

6)术语普及:Tomcat的Engine、Context、Host、Wrapper关系

7)prepareContext 中的扩展点ServletContextInitializer

8)思考了:tomcat和SpringBoot怎么整合的?

9)内嵌Tomcat最终的启动

file

第十节成长记10:Bean实例化的流程和设计

finishBeanFactoryInitialization之前和之后的操作概况

preInstantiateSingletons方法的核心脉络

创建bean的核心流程

Bean实例化的扩展点设计

file

完结寄语

到这里SpringBoot成长记就告一段落了,其实最关键的是教给大家的思想,之后SpringBoot的设计和扩展点,最后才是SpringBoot的原理。

当你掌握这些之后,SpringBoot的很多细节,甚至其他类似的逻辑,你都能举一反三了。那么成长记的目的就达到了

希望可以经过SpringBoot成长记,学到的东西可以学以致用,举一反三,应用到更多技术学习、面试、线上问题解决等场景中,就像我开篇说的。

一个人成长的按重要性排的顺序应该是:思想观念—>能力方法—>知识、收入。

好了,我们下一个成长记再见!

最终给大家来个图,完结撒花~~

file

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » SpringBoot成长记11:SpringBoot完结总结