乐趣区

关于springboot:SpringBoot成长记11SpringBoot完结总结

后面 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 公布!

退出移动版