后面 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<Listeners>,基于类封装不同阶段的扩大
基于观察者模式设计批量事件播送器、查问缓存升高 O(n) 复杂度
第四节成长记 4:Run 办法中配置文件的解决
咱们剖析了 SpringBoot 对对配置文件的解析,配置文件解决外围逻辑是创立配置文件对象、给配置文件对象设置一堆值,次要是各个配置文件。
而最要害的是配置文件的设计思考
1)配置文件须要查找:ResourceLoader(ClassLoader)
2)不同配置文件的解析:不同的 Resolver
3)配置文件的内容封装:PropertySource+profile 泛型设计,存储不同格局内容
4)多个配置文件 MutablePropertySources:List<PropertySource>
第五节成长记 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 都会有不定期的更新哟,大家敬请期待~~
本文由博客一文多发平台 OpenWrite 公布!