第六十三章 Spring之假如让你来写Boot——番外篇:再谈ApplicationContext

Spring源码阅读目录

第一部分——IOC篇

第一章 Spring之最熟悉的陌生人——IOC
第二章 Spring之假如让你来写IOC容器——加载资源篇
第三章 Spring之假如让你来写IOC容器——解析配置文件篇
第四章 Spring之假如让你来写IOC容器——XML配置文件篇
第五章 Spring之假如让你来写IOC容器——BeanFactory和FactoryBean
第六章 Spring之假如让你来写IOC容器——Scope和属性填充
第七章 Spring之假如让你来写IOC容器——属性填充特别篇:SpEL表达式
第八章 Spring之假如让你来写IOC容器——拓展篇
第九章 Spring之源码阅读——环境搭建篇
第十章 Spring之源码阅读——IOC篇

第二部分——AOP篇

第十一章 Spring之不太熟的熟人——AOP
第十二章 Spring之不得不了解的内容——概念篇
第十三章 Spring之假如让你来写AOP——AOP联盟篇
第十四章 Spring之假如让你来写AOP——雏形篇
第十五章 Spring之假如让你来写AOP——Joinpoint(连接点)篇
第十六章 Spring之假如让你来写AOP——Pointcut(切点)篇
第十七章 Spring之假如让你来写AOP——Advice(通知)上篇
第十八章 Spring之假如让你来写AOP——Advice(通知)下篇
第十九章 Spring之假如让你来写AOP——番外篇:Spring早期设计
第二十章 Spring之假如让你来写AOP——Aspect(切面)篇
第二十一章 Spring之假如让你来写AOP——Weaver(织入器)篇
第二十二章 Spring之假如让你来写AOP——Target Object(目标对象)篇
第二十三章 Spring之假如让你来写AOP——融入IOC容器篇
第二十四章 Spring之源码阅读——AOP篇

第三部分——事务篇

第二十五章 Spring之曾经的老朋友——事务
第二十六章 Spring之假如让你来写事务——初稿篇
第二十七章 Spring之假如让你来写事务——铁三角篇
第二十八章 Spring之假如让你来写事务——属性篇
第二十九章 Spring之假如让你来写事务——状态篇
第三十章 Spring之假如让你来写事务——管理篇
第三十一章 Spring之假如让你来写事务——融入IOC容器篇
第三十二章 Spring之源码阅读——事务篇

第四部分——MVC篇

第三十三章 Spring之梦开始的地方——MVC
第三十四章 Spring之假如让你来写MVC——草图篇
第三十五章 Spring之假如让你来写MVC——映射器篇
第三十六章 Spring之假如让你来写MVC——拦截器篇
第三十七章 Spring之假如让你来写MVC——控制器篇
第三十八章 Spring之假如让你来写MVC——适配器篇
第三十九章 Spring之假如让你来写MVC——番外篇:类型转换
第四十章 Spring之假如让你来写MVC——ModelAndView篇
第四十一章 Spring之假如让你来写MVC——番外篇:数据绑定
第四十二章 Spring之假如让你来写MVC——视图篇
第四十三章 Spring之假如让你来写MVC——上传文件篇
第四十四章 Spring之假如让你来写MVC——异常处理器篇
第四十五章 Spring之假如让你来写MVC——国际化篇
第四十六章 Spring之假如让你来写MVC——主题解析器篇
第四十七章 Spring之假如让你来写MVC——闪存管理器篇
第四十八章 Spring之假如让你来写MVC——请求映射视图篇
第四十九章 Spring之假如让你来写MVC——番外篇:属性操作
第五十章 Spring之假如让你来写MVC——融入IOC容器篇
第五十一章 Spring之源码阅读——MVC篇

第五部分——Boot篇

第五十二章 Spring之再进一步——Boot
第五十三章 Spring之假如让你来写Boot——环境篇
第五十四章 Spring之假如让你来写Boot——注解篇(上)
第五十五章 Spring之假如让你来写Boot——注解篇(下)
第五十六章 Spring之假如让你来写Boot——SPI篇
第五十七章 Spring之假如让你来写Boot——配置文件篇(上)
第五十八章 Spring之假如让你来写Boot——配置文件篇(下)
第五十九章 Spring之假如让你来写Boot——番外篇:再谈Bean定义
第六十章 Spring之假如让你来写Boot——自动装配篇
第六十一章 Spring之假如让你来写Boot——番外篇:杂谈Starter
第六十二章 Spring之假如让你来写Boot——番外篇:重构BeanFactory
第六十三章 Spring之假如让你来写Boot——番外篇:再谈ApplicationContext
第六十四章 Spring之假如让你来写Boot——内嵌Web容器篇
第六十五章 Spring之假如让你来写Boot——Main方法启动篇
第六十六章 Spring之最终章——结语篇



前言

    对于Spring一直都是既熟悉又陌生,说对它熟悉吧,平时用用没啥问题,但面试的时候被问的一脸懵逼,就很尴尬,都不好意思在简历上写着熟悉Spring了
在这里插入图片描述

    所以决定花点时间研究研究Spring的源码。主要参考的书籍是:《Spring源码深度解析(第2版)》、《Spring揭秘》、《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》


     书接上回,在上篇 第六十章 Spring之假如让你来写Boot——自动装配篇 中,A君 昨天已经完成了自动装配这一大功能,自动装配可以说是 Boot 的半壁江山,剩下的东西也不多了。。。

尝试动手写IOC容器

    出场人物:A君(苦逼的开发)、老大(项目经理)

    背景:老大 要求 A君在一周内开发个简单的 IOC容器

    前情提要:A君 昨天已经完成了自动装配这一大功能,自动装配可以说是 Boot 的半壁江山,剩下的东西也不多了。。。

再谈ApplicationContext

    这一篇呢,A君 准备再来聊一下ApplicationContext,熟悉 Spring 的小伙伴,想必都知道这个类,也是面试中经常出现的东西.和之前的BeanDefinition一样,A君 一直都是秉承着够用就行的心态,一直都没有对其进行相应的改造。结果也和BeanDefinition一样,功能有点捉襟见肘了,而且整个 Spring 系列都快完事了,都没谈到ApplicationContext了,总感觉怪怪的,思来想去,A君 还是决定去看看ApplicationContext是何方神圣

集大成者

    A君 看了源码半天,对ApplicationContext只有四个字的评价——集大成者,那经历过前面的时光后,A君Spring 的风格或多或少都有其了解。Spring 总是把各个功能拆的很细,然后逐步去扩展。ApplicationContext也是一样的,只不过呢,它的父接口属实有亿点多了

在这里插入图片描述
可以看到,ApplicationContext继承了EnvironmentCapableListableBeanFactoryHierarchicalBeanFactoryMessageSourceApplicationEventPublisherResourcePatternResolver。这,A君 都不用看具体代码,光凭这几个类就能猜出大体有哪些功能:环境、创建Bean、国际化、事件发布、资源定位。这也能看出 Spring 用心良苦,内部拆分的这么细,最终对外暴露的只有一个总的接口,尽量简单。也许这就是所谓的高内聚了吧

可配置的ApplicationContext

    按照 Spring 的一贯作风,接下来,不出意外的话,就应该是可以配置的Application了,提供给用户可编程式的接口
在这里插入图片描述

这一堆set方法实在没啥好说的,下一个。。。

提取抽象ApplicationContext

    接口->抽象类->实现类,照着这个思路看 Spring 源码就很简单了。毫无疑问,接下来就轮到抽象类登场了。也就是大名鼎鼎的AbstractApplicationContext。不过要注意的是:Application为了用户方便,继承了一大堆接口,而 Java 类又是单继承的,所以这时候只能通过组合来解决了。具体代码就不细看了,看下refresh方法即可

在这里插入图片描述

在这里插入图片描述

提取抽象ApplicationContext

    抽象类提取完成之后,剩下就是具体实现了,不过具体实现却是有一大堆,像传统xml配置,还有基于注解的。基于xmlApplicationContext前面说的七七八八了,这里就重点看下注解的吧。注解的关键在于利用在注解上的信息组成一个BeanDefinition,而这个BeanDefinition通常是要用编程进行注册的,实现注解的ApplicationContext之前,可以在抽取一层

在这里插入图片描述

基于注解的ApplicationContext

    之前的父类们已经把功能实现的差不多的了,基于注解的ApplicationContext只需要根据基础包路径扫描类进行了,没有什么东西了

在这里插入图片描述

用于Web的ApplicationContext

    常规的Application已经说完了,接下来就是特殊情况下的Application,其中一个就是上一篇刚说到的Web环境下的Application。Web项目依托于Web容器,所以有自己的一套上下文和环境信息。故而要额外提供方法才行

在这里插入图片描述

可配置的WebApplicationContext

    剩下的就是老调重弹了,既然Application有可配置的接口,那么WebApplicationContext自然也不能少了

在这里插入图片描述

    接下来的流程就一模一样了,提取通用类,在具体实现了,就不在一一细说了。最后再给各个主要的ApplicationContext拍个全家福(相对来说,XMLReactive的不在此列

在这里插入图片描述


总结

    正所谓树欲静而风不止,欲知后事如何,请看下回分解(✪ω✪)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穷儒公羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值