前面10节的回顾
通过前面10节SpringBoot成长记的分析,你应该对SpringBoot的原理和设计思想有了很清晰的认识了。
最后这一节呢,我们将之前每一节最重要的知识点,提取出来一个总结。
第一节成长记1:你真的懂SpringBoot吗?
我们通过去官方文档寻找SpringBoot核心功能,教给大家两个思想,先脉络后细节的思想和注重思考的思想。
我自己对SpringBoot功能的思考:SpringBoot定义了新的web应用启动流程、SpringBoot核解决了Spring集成各种技术的复杂性。
第二节成长记2:从HelloWorld开始分析SpringBoot
我们从HelloWorld开始分析,分析了:SpringApplication的创建时核心组件图、SpringApplication Run方法的脉络
传授给大家2个思想
1)连蒙带猜的思想,根据方法名称,注释大体猜测方法和类的作用
2)抓大放小的思想,排除不重要的,分析最主要的。
第三节成长记3:SpringBoot扩展点之SpringApplicationRunListeners
SpringApplicationRunListeners的扩展
1)对流程的扩展方法 starting started running等
2)对配置文件的扩展方法environmentPrepared
3)对容器的扩展方法contextPrepared、contextLoaded
Listeners的扩展点设计
基于配置封装List,基于类封装不同阶段的扩展
基于观察者模式设计批量事件广播器、查询缓存降低O(n)复杂度
第四节成长记4:Run方法中配置文件的处理
我们分析了SpringBoot对对配置文件的解析,配置文件处理核心逻辑是创建配置文件对象、给配置文件对象设置一堆值,主要是各个配置文件。
而最关键的是配置文件的设计思考
1)配置文件需要查找:ResourceLoader(ClassLoader)
2)不同配置文件的解析:不同的Resolver
3)配置文件的内容封装:PropertySource+profile 泛型设计,存储不同格式内容
4)多个配置文件MutablePropertySources:List
第五节成长记5:Spring容器的创建
Spring容器的创建时的核心组件:reader和scanner、DefaultListableBeanFactory
reader和scanner的设计和作用:reader解析和增加BeanDefination、scanner查找和过滤BeanDefination
术语普及BeanDefinition、BeanDefinitionRegistry、InternalBean
从Reader和Scanner开始思考下Spring容器的抽象设计,Resource->ClassLoader->Reader/Scanner->BeanDefination的设计
第六节成长记6:准备SpringContext容器
prepareContext()的核心脉络:给容器Context和容器DefaultListableBeanFactory设置一些属性
触发的扩展点(非常重要的操作):applyInitializers()触发的扩展点操作、触发listener对容器扩展操作
术语普及BeanFactoryPostProcessor是什么?
beanFactory的一些属性补充(值得一提的操作):
1 )beanFactory.registerSingleton注册对象到容器的singletonObjects属性
2)BeanDefinitionLoader.load()补充BeanDefinition,这里补充了1个LearnSpringBootApplication 的BeanDefinition到beanFactory中
设置几个属性或者组件(不重要的操作)
第七节成长记7:容器的扩展操作是如何执行的
快速摸一下refreshCotenxt的脉络
invokeBeanFactoryPostProcessors之前的主要操作概括
术语普及BeanDefinitionRegistryPostProcessor是什么?
invokeBeanFactoryPostProcessors的核心脉络
1)if-else核心脉络逻辑:执行扩展方法1:postProcessBeanDefinitionRegistry()、执行扩展方法2:postProcessBeanFactory()
2)3个For循环的核心脉络逻辑:之前执行的是Spring内部定义好的一些BeanFactoryPostProcessor,
在执行了if-else逻辑后,其实扫描出来了ClassPath下更多第三方和其他的BeanFactoryPostProcessor
第八节成长记8:SpringBoot实现自动装配配置,第三方功能的扩展之处
1)SpringBoot实现自动装配配置
术语普及starter是什么?
核心的ConfigurationClassPostProcessor
思考:ConfigurationClassPostProcessor的添加BeanDefination的设计
2)第三方功能的扩展之处实现原理
思考:mybatis的Mapper如何被添加的?
基于ImportBeanDefinitionRegistrar的扩展
基于BeanFactoryPostProcessor的扩展
第九节成长记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最终的启动
第十节成长记10:Bean实例化的流程和设计
finishBeanFactoryInitialization之前和之后的操作概况
preInstantiateSingletons方法的核心脉络
创建bean的核心流程
Bean实例化的扩展点设计
完结寄语
到这里SpringBoot成长记就告一段落了,其实最关键的是教给大家的思想,之后SpringBoot的设计和扩展点,最后才是SpringBoot的原理。
当你掌握这些之后,SpringBoot的很多细节,甚至其他类似的逻辑,你都能举一反三了。那么成长记的目的就达到了
希望可以经过SpringBoot成长记,学到的东西可以学以致用,举一反三,应用到更多技术学习、面试、线上问题解决等场景中,就像我开篇说的。
一个人成长的按重要性排的顺序应该是:思想观念—>能力方法—>知识、收入。
好了,我们下一个成长记再见!
最终给大家来个图,完结撒花~~
彩蛋:成长记除了知识和思想篇,成长记一般还会有生产和实战经验篇,JDK、Kafka、ZK、SpringBoot都会有不定期的更新哟,大家敬请期待~~