技术文章

新手学习spring源码,该如何入手?

学习Spring源码前,我们需要想以下几点?

① 为什么会存在Spring框架,能做什么?如果要我来做,我该怎么做?

② 然后我们在学习的过程中会遇到许多概念,比如IOC、AOP、DI、BeanFactory、ApplicationContext等一些概念,需要详细了解明白

IOC: 缓存Bean的地方。存放在Map容器中。

DI: 可以是set/get/constructor,通过反射进行注入

AOP:为了增强 原始Bean的功能(代理技术)

③ 能做什么?java中的万能胶 ,做了什么?帮我们管理Bean,管理bean的生命周期

④ 如果需要我来做,我会怎么做? (怎样手写一个mini版Spring)

(1) 我们要预设一些规则,比如定义一些扫描注解、扫描哪些 包?

(2) 然后按照一定的顺序去加载扫描包下的Class类,放入Map中。

(3) 扫描上面的Class 类,然后判断是否实现了一些注解,如果实现了,实例化后放入Map中

(4) 依赖注入,给实例化的Bean进行属性注入。

为什么要学Spring源码?

在学习源码前,我们需要知道为什么需要学源码?

提升技术功底:学习源码的优秀思想,比如学些一些问题的解决思路,优秀的设计模式,从而能很大的提升自己的功底。 深度掌握技术框架:如果我们源码看多了,对于新技术或者框架的掌握速度会大幅提升,看下框架的Demo就能知道底层的实现,技术框架很多都是通过用的,比如,举几个例子

① 为什么Mybatis 我们只需要写Dao接口就可以了,因为Spring 底层帮我们做了代理,用到的技术就是动态代理。

② Dubbo 的远程调用为什么和调用本地方法一样呢?原因也是动态代理,Dubbo 把 调用的细节封装在代理类中。

③ 还有一些拦截器思想:SpringMVC 拦截器、AOP 底层代码的拦截器+递归思想、Mybatis插件拦截器等。

上述的技术都是一通百通,百变不离其宗。

3 快速定位线上问题: 遇到线上的问题,特别是框架源码里的Bug,能够快速定位,这就是你和被人的优势。

4. 对面试大有益处: 面试一线互联网公司对于框架技术一般都会遇到源码级别的。

5.拥抱开源社区:参与到开源项目的研发,结实更多大牛

学习Spring源码的方法

1. 先使用:先看官方文档快速掌握框架的基本使用,

2. 调试的时候,完全可以在运行环境,导入jar包就能调试,可以由针对性的打断点

3. 抓主线:找一个demo入手,顺藤摸瓜快速静态看一遍框架的主线源码(抓大放小),画出源码主流程图,切勿一开始就陷入源码的细枝末节,遇到不明白的可以才,七分猜测三分验证,如果猜对了,就会有成就感。

4. 画图做笔记:总结框架的一些核心功能点,从这些功能点入手深入到源码的细节,边看源码边画源码走向图,并对关键源码的理解做笔记,把源码里的闪光点都记录下来,后续借鉴到工作项目中,理解能力强的可以直接看静态源码,也可以边看源码边debug源码执行过程,观察一些关键变量的值

5.整合总结:所有功能点的源码都分析完后,回到主流程图再梳理一遍,争取把自己画的所有图都在脑袋里做一个整合

总结

1、官网是最好的一手资料。

2、一定要在掌握框架的使用以后再去研究源码

3、源码可能需要你的一些技术准备:比如 java技术功底、java设计模式等

4.学习最好的方法就是两个字: 重复,看源码的 第一遍是很痛苦的,看第二遍 第三遍 ,你的思路就会越来越清晰。

5、学习最好的方法就是重复,耐得住 寂寞,你才会成为 最终的王者。