Spring源码解析系列汇总
相信我,你会收藏这篇文章的
本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题。喜欢的同学可以收藏起来以备不时之需
- 本篇文章搭建了IOC源码解析的demo环境,启动这个环境即可开启阅读Spring源码的第一步
- 开始源码阅读时介绍了Spring容器中最经典的容器
ClassPathXmlApplicationContext,这个容器是我们在学习Spring的时候最先接触的一个容器,它负责加载当前环境下的xml配置文件 - 紧接着介绍了bean工厂
BeanFactory以及容器中bean的包装类BeanDefinition - 然后就是Spring对xml配置文件的加载和解析
- 当解析的
beans标签中各个bean中时将会把这个东东使用BeanDefinition包装后注册到容器中 - 当
bean注册完成后会有一些Spring对BeanFactory的扩展点的处理 - 当然除了扩展点还有国际化、监听器等操作
- 开篇先介绍了
conversionService和EmbeddedValueResolver两个比较有意思的东东 - 然后就是重点的
bean的初始化 - 初始化过程中涉及到了
singleton和prototype两个Scope的bean的处理 - 当然,还有令人头疼的循环依赖问题
- 创建bean的过程中还有我们熟悉的
@Autowired注解注入属性的方式 - 接着就是一些清除缓存的操作
SpringIOC源码解析(基于注解)
阅读本篇文章之前建议您首先查看上方两篇文章,因为本篇主要是描述了基于注解的方式和基于xml配置文件方式的异同点
- 源码阅读环境的搭建
- 首先简单描述了
bean容器AnnotationConfigApplicationContext - 然后源码执行的第一步就是关于包扫描一块的东西,也就是我们比较熟悉的注解
@ComponentScan - 扫描到了各个带有注解的类之后就是读取类呀、反射呀什么的来加载类
- 当
bean已经加载完后就是bean的注册逻辑了
相比较与之前两篇文章的长篇大论,这篇文章的篇幅要少很多,这主要得益于Spring的设计精妙和代码之优雅
- 源码阅读环境的搭建
@EnableAspectJAutoProxy注解的原理@EnableAspectJAutoProxy注解又使用到了@Import注解,关于@Import注解的文章下面有地址
- 首先提到了SpringAOP是基于
postProcessBeforeInstantiation和postProcessAfterInstantiation两个方法实现的,这篇文章主讲postProcessBeforeInstantiation - 加载增强
- 获取所有的增强又对增强进行了一系列的封装
- 以
postProcessAfterInstantiation开篇 - 所有的bean在初始化之后都会调用这个方法
- 在这里获取到之前加载到的所有的增强,和类的所有方法一一匹配
- 当类具有匹配增强的时候就可以为这个类生成具体的代理了
- 传统JDBC的使用
- 源码阅读环境的搭建
- 使用JdbcTemplate以update方法切入
- 获取连接加载驱动等方法的封装
- 请求参数的封装
- 调用驱动提供的方法
- query方法的分析,与update仅有返回结果的处理不同其他完全相同
- 三种使用方式
- 加载时机
- 对不同使用方式的处理方式
- 源码阅读环境的搭建
@EnableTransactionManagement注解的原理解析
Spring事务源码解析(二)获取增强
读到这里的朋友希望您最好对AOP的源码有一定的了解
- 增强的获取
@Transactional注解属性的解析
- 创建事务信息(包含事务隔离级别的处理等)
- 调用执行链
- 异常回滚
- 清除事务信息
- 提交事务
- 源码阅读环境的搭建
- SpringBoot中SpringMVC自动配置原理
DispatcherServlet的初始化逻辑- web容器的初始化
- 获取对应的handler
- 获取对应的handlerAdapter
- 调用handle
- 执行拦截器
- 处理返回结果
源码阅读环境
您可能注意到上方文章中包含了很多源码阅读环境的搭建,当真正自己要去阅读时搭建起来还是比较浪费时间的。所以我把这些工作都替您做好了,您可以直接访问下方链接获取
https://github.com/shiyujun/spring-framework
后续规划
- Spring常用扩展点的应用场景
- SpringBoot源码解析
- SpringCloud常用组件源码解析
- MyBatis、druid源码解析
- 阿里开源Nacos、Sentinel、Seata源码解析
- K8S、Istio源码解析
- 等等
交流群
为了方便大家的交流学习,特意搞了个技术交流群,有兴趣的同学可以扫描下方二维码进群。如二维码过期可在公众号添加小编的微信发送暗号进群

Spring源码解析系列汇总的更多相关文章
- SpringBoot源码解析系列文章汇总
相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的SpringBoot源码解析系列文章的汇总,当你使用SpringBoot不仅仅满足于基本使用时.或者出去面试被面试官虐了时.或者说想要深入了解一下 ...
- spring源码分析系列 (5) spring BeanFactoryPostProcessor拓展类PropertyPlaceholderConfigurer、PropertySourcesPlaceholderConfigurer解析
更多文章点击--spring源码分析系列 主要分析内容: 1.拓展类简述: 拓展类使用demo和自定义替换符号 2.继承图UML解析和源码分析 (源码基于spring 5.1.3.RELEASE分析) ...
- spring源码分析系列
spring源码分析系列 (1) spring拓展接口BeanFactoryPostProcessor.BeanDefinitionRegistryPostProcessor spring源码分析系列 ...
- spring源码分析系列 (1) spring拓展接口BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor
更多文章点击--spring源码分析系列 主要分析内容: 一.BeanFactoryPostProcessor.BeanDefinitionRegistryPostProcessor简述与demo示例 ...
- Android源码解析系列
转载请标明出处:一片枫叶的专栏 知乎上看了一篇非常不错的博文:有没有必要阅读Android源码 看完之后痛定思过,平时所学往往是知其然然不知其所以然,所以为了更好的深入Android体系,决定学习an ...
- Spring源码解析-ioc容器的设计
Spring源码解析-ioc容器的设计 1 IoC容器系列的设计:BeanFactory和ApplicatioContext 在Spring容器中,主要分为两个主要的容器系列,一个是实现BeanFac ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
随机推荐
- redis的embstr编码
问题来了 今天在看书籍<Redis设计与实现>的时候,在8.2字符串对象里面写到 如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度大于 39 字节, 那么字符串对象将使用一个简 ...
- python进程基础点整理
操作系统 串行: 一个程序完完整整的执行完再执行下一个 并发: 看起来像是同时运行,其实就是程序间的切换频率比较快,看不出来 并行:真正的同时运行 多道技术 空间复用:共用一个内存条,多个进程相互隔离 ...
- JDK1.8源码分析02之阅读源码顺序
序言:阅读JDK源码应该从何开始,有计划,有步骤的深入学习呢? 下面就分享一篇比较好的学习源码顺序的文章,给了我们再阅读源码时,一个指导性的标志,而不会迷失方向. 很多java开发的小伙伴都会阅读jd ...
- [Spring cloud 一步步实现广告系统] 1. 业务架构分析
什么是广告系统? 主要包含: 广告主投放广告的<广告投放系统> 媒体方(广告展示媒介-)检索广告用的<广告检索系统> 广告计费系统(按次,曝光量等等) 报表系统 Etc. 使用 ...
- 读写锁(ReadWriteLock)
为了提高性能,Java提供了读写锁,读写锁分为读锁和写锁.多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM控制的.如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率. 读 ...
- Html5 Canvas动画基础碰撞检测的实现
在Canvas中进行碰撞检测,大家往往直接采用游戏引擎(Cocos2d-JS.Egret)或物理引擎(Box2D)内置的碰撞检测功能,好奇的你有思考过它们的内部运行机制吗?下面将针对基本的碰撞检测技术 ...
- 持续集成与Devops关系
什么是持续集成 持续集成(Continuous Integration,简称CI),是一种软件开发实践,在实践中指只要代码有变更,就自动运行构建和测试,反馈运行结果.通俗一点来讲,就是绑定项目的代码仓 ...
- JavaWeb开发——软件国际化(文本元素国际化)
前几天围绕着JDBC编程进行了系统的学习.现在我们对Java程序数据库操作已经是轻车熟路了.也学会了使用各种框架来帮助我们简化编程. 今天是学习计划的第七天,虽然学习热情没有前几天高涨了.但是,写博客 ...
- JavaScript 是如何运行的?
摘要: 理解JS执行原理. 原文:JavaScript 是如何运行的? 作者:hengg Fundebug经授权转载,版权归原作者所有. 什么是JavaScript? 我们来确认一下JavaScrip ...
- USB HOST与 USB OTG的区别及工作原理
在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!! 转自USB HOST与 ...