文章目录
前言
体能状态先于精神状态,习惯先于决心,聚集先于喜好
该走的路是一定要走的
作为一名 Java 开发实践者,研究学习 Spring 源码是必不可少的环节。
这里笔者的参考资料是 《Spring 源码深度解析》以及互联网提供的丰富资料
源码下载 还是 IDE 看 jar 包?
这里笔者的建议是直接运用 IDE 的功能去看源码即可,好处是现在的 IDE 功能很强大,足够支持我们从一个类名找到这个类以及其父类子类等,而且就一般国内的环境而言,Maven 的普及力度要远远大于 Gradle.Spring 托管在 Github 上的源码版本管理工具是 Gradle。
当然,如果你是技术宅,还是建议按照约定俗成的方式下载源码并编译进行,尽管会花费一些时间 Gradle的安装
方法论
Spring 源码是基于 Java 语言的封装、继承和多态的,其代码层次之复杂简直“令人发指”,所以掌握正确的方法论才可以保证你看的懂,然后才是看得下去。
这里笔者有几个建议
建议一:掌握基础的 UML 知识和工具
在梳理代码层次结构的时候就将类、接口的关系展现在 UML 类图上,便于自己记录和分析
笔者之前总结的 UML 知识 UML
工具可以直接使用免费的网站 PressOn 或者 https://www.draw.io/
UML 类图的实践其实比想象的简单,在 Spring 源码学习中用到最多的就是
A extends B,A 和 B 要么都是类,要么都是接口 A+实线+三角形+B
A implements B,A是类,B是接口,则 A+虚线+三角形+B
如果 A 是接口,则类名上加 << interface >>
如果A是抽象类,则类名使用 斜体
建议二:积累常见的英文术语
阅读源码不单单是为了搞清楚代码的组织结构,更重要的是搞明白类的作用功能,Spring 源码中的注释是十分丰富的,为了提高阅读效率可以有针对性的积累自己的术语库。
建议三:用好关键字查询,看看别人怎么说
你阅读了一个新类,可以以这个类作为关键字,看看前人有什么高见,这比你查询 Spring 源码 得到的有价值的文档要有针对性的多,也更容易有其他的收获。
比如源码的这样写的好处。
建议四:带着问题学习
Spring Bean 是怎么被加载的,单例是怎么体现的,容器是什么?注解是怎么发生的?监听是怎么实现的?Spring 用到了那些设计模式?Spring bean 的声明周期是如何管理的?Bean 的销毁是如何进行的?事务是如何实现的?对数据库的支持是如何实现的?对消息的支持是如何实现的?
组件:Component
使用 Spring 的人一定见过 @Component 这个注解,这个注解帮助 Spring 将你自定义的类注册为Spring Bean,其实在Spring 注释中到处是这个单词 Component,从其接口的定义就可以看出来,Spring的一大思想就是 组件化,接口定义组件的功能,实现类实现具体的功能,包括Spring可以很好的和mybatis、redis、ActiveMQ 等结合,都是体现了这一思想。