spring源码 系列文章目录
- 第一章 源码环境搭建以及学习方法
- 第二章 探索bean加载
- 第三章 探索AOP
- 第四章 探索依赖分析
- 第五章 探索SPI机制
- 第六章 探索常用注解
- 第七章 spring其他扩展点
前言
源码跟踪,自下而上,由简至繁。找到一种使用情况为切入点,自下而上去追踪调用链,追踪时只看相关的主线代码,不要想着一次看完所有流程,由简至繁。
文章涉及的源码均已上传到了码云,参考【README.md】文件部署运行即可
spring码云地址: https://gitee.com/tangjingshan/Spring-Framework 注释版本代码分支:git checkout nickyStudy5.3.4
spring源码流程图:https://www.processon.com/view/link/60ad111407912906fbd3a6d3 当前文章的代码路径:org.springframework.study.debug
一、如何制定计划
源码毕竟是一个团队,呕心沥血多年的成果,普通人是不可能短时间内吃透的,所以学习的时候一定要循序渐进,有计划,分步骤的去学,以下是我的学习步骤,大家可以参考下
- 整体计划
- 熟练使用框架的一些基本api
- 梳理基本api的 完整的数据流向+需要记忆的关键点的数据流向(只梳理,不管其他)
- 梳理框架提供了哪些扩展点(扩展相比原理更重要,更常用)
- 梳理关键类图
- 手写一个简易的框架
- 探索某个功能的计划
- 定一个简单的切入点
- 猜测关键点,自下而上,制定阅读计划
- 自下而上,猜测如果你来实现这个功能,必须要实现哪些关键点
- 根据计划,编写简单测试代码
- 开始探索源码
- 总结,自上而下总结
- 画一个简单的流程图,存入脑海
二、奇淫技巧
1. 条件断点
- 场景:遍历某个长度为9999的集合,只需要调试下标为第5555的数据;调试ioc,注册bean的方法会被很多地方调用,如何让程序只在自己关心的bean的时候才启用断点,其他情况不进断点
- 例子:
2. 调用链
- 场景:spring调用链很长很长,如何快速看到当前方法的所有调用层级
- 例子:
- 注意:可通过筛选,过滤部分不重要的调用链
3. 计算表达式
- 场景:想看某个对象的其他属性,不一定要显示的打印出来,可以使用计算表达式;也可以使用计算表达式运行时动态改变该对象的某个属性
- 例子:
4. @link注解的使用
- 场景:由于调用链复杂,好不容易找到的某个触发点的代码,可能下次就忘记了,可以使用@link注解,下次复盘,【ctrl+鼠标右键】点击即可跳转到目标方法
- 例子:
三、源码环境
参考前言,搭建源码环境。按照【README.md】文件部署运行即可
总结
本篇主要是源码环境搭建,以及一些常用技巧的分享,具体源码阅读,下一篇开始