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

一、如何制定计划

源码毕竟是一个团队,呕心沥血多年的成果,普通人是不可能短时间内吃透的,所以学习的时候一定要循序渐进,有计划,分步骤的去学,以下是我的学习步骤,大家可以参考下

  • 整体计划
  1. 熟练使用框架的一些基本api
  2. 梳理基本api的 完整的数据流向+需要记忆的关键点的数据流向(只梳理,不管其他)
  3. 梳理框架提供了哪些扩展点(扩展相比原理更重要,更常用)
  4. 梳理关键类图
  5. 手写一个简易的框架
  • 探索某个功能的计划
  1. 定一个简单的切入点
  2. 猜测关键点,自下而上,制定阅读计划
  • 自下而上,猜测如果你来实现这个功能,必须要实现哪些关键点
  1. 根据计划,编写简单测试代码
  2. 开始探索源码
  3. 总结,自上而下总结
  4. 画一个简单的流程图,存入脑海

二、奇淫技巧

1. 条件断点

  • 场景:遍历某个长度为9999的集合,只需要调试下标为第5555的数据;调试ioc,注册bean的方法会被很多地方调用,如何让程序只在自己关心的bean的时候才启用断点,其他情况不进断点
  • 例子:

spring电子书 spring源码电子书_源码

2. 调用链

  • 场景:spring调用链很长很长,如何快速看到当前方法的所有调用层级
  • 例子:

spring电子书 spring源码电子书_java_02

  • 注意:可通过筛选,过滤部分不重要的调用链

spring电子书 spring源码电子书_源码_03

3. 计算表达式

  • 场景:想看某个对象的其他属性,不一定要显示的打印出来,可以使用计算表达式;也可以使用计算表达式运行时动态改变该对象的某个属性
  • 例子:

spring电子书 spring源码电子书_ioc_04

4. @link注解的使用

  • 场景:由于调用链复杂,好不容易找到的某个触发点的代码,可能下次就忘记了,可以使用@link注解,下次复盘,【ctrl+鼠标右键】点击即可跳转到目标方法
  • 例子:
  • spring电子书 spring源码电子书_ioc_05

三、源码环境

参考前言,搭建源码环境。按照【README.md】文件部署运行即可

总结

本篇主要是源码环境搭建,以及一些常用技巧的分享,具体源码阅读,下一篇开始