Spring 源码的阅读心得

简介: 【1月更文挑战第12天】最近花了很多时间去阅读Spring框架核心部分的源码,本文将分享一些阅读的思路和心得,分享给想阅读源码但是不知道如何下手或者读不下来的小伙伴。

最近花了很多时间去阅读Spring框架核心部分的源码,本文将分享一些阅读的思路和心得,分享给想阅读源码但是不知道如何下手或者读不下来的小伙伴。

为什么要读 Spring 的源码?

Spring 是 Java 开发者最常接触到的框架,也是最优秀的框架之一,Spring 的源码质量也是开源框架中的佼佼者。一个程序员想要让自己的开发水平得到提升,阅读源码是必不可少的,但是大部分人日常工作中能够接触到的代码有限,如果你只是在日常的工作中阅读同事的代码,那能学到的东西是非常有限的。一来,工作中能接触到的同事的能力上限,跟全世界顶尖程序员的能力上限相比,差距是非常大的;再者,工作中的场景,经常被工期等非技术因素影响,并不能完全把开发者的技术水平体现出来。

因此,众多的优秀开源项目,就是一座巨大的知识宝库。读一本书,是与书籍的作者交流,而读一个开源项目的代码,则是与项目的开发者交流,而且这些开发者,往往是特定领域中非常顶尖的开发者。通过他们的源码,能够读到书本中学不到的知识和经验,更重要的是他们的巧思。

另外,阅读代码是一个程序员的基本功课,阅读并理解代码的能力,对一个开发者来说非常重要,这个能力需要不断地通过练习来提高。如果能花在阅读代码这件事上的时间是固定的,那么,阅读怎样的代码,决定了这些时间的所获的的收益。阅读一些通篇都是条件判断和循环语句的代码能收获的极其有限,而阅读优秀开源项目的代码则会非常解渴。

阅读代码带给我的收获就是,更加宏观地思考整个项目的架构,以及从需要解决的问题中分析出抽象层次更高的解决方案。

阅读代码的收获

阅读代码还能收获什么呢?

如果你认真学习了各种设计模式,但是不知道如何应用,那么你能从诸如 Spring 这样的项目中,遇到各种优秀设计模式的最佳使用场景和实践;你还会从项目的整体架构中,学会组织代码的方法,或者一些架构的思维;另外,还可能有一些意外收获。

阅读的方法

当拿到一个开源项目代码的时候,应该如何开始呢?下面以 Spring 为例,分享一下我的心得

如何开始

对于 Spring 而言,在开始阅读源码之前,至少在框架的运用层面,需要对它有一定的了解。Spring 最核心的特性就是 IOC 容器,在基于 Spring 开发项目时,我们与框架交互做多的两件事,就是对容器进行配置,以及从容器中获取一个 Bean 实例,因此可以从这两方面入手。

对于容器的配置,主要是在容器启动时发挥作用。你可以从 ClassPathXmlApplicationContext 类的构造方法开始,分析 Spring 如何基于 XML 配置文件,来创建全新的 Spring 上下文实例,或者,从 AnnotationConfigApplicationContext 的构造方法开始分析 Spring 如何基于给定包路径下的组件扫描来创建上下文实例。Spring 上下文的启动过程,其实就是创建上下文对象的过程,相对于只是基于框架做应用开发而言,通过了解这一过程,可以对 Spring 的 IOC 容器的理解深入好几个层次。

另一个主要的逻辑线就是从容器中获取 Bean 实例,这条主线从 BeanFactory 的getBean方法开始,分析完这个过程,就了解了 Spring 如何从你的需求,根据容器中的 BeanDefinition 创建出一个 Bean 实例的过程。

除了 IOC 以外,Spring 中另外一个重要特性 AOP 则是基于 IOC 容器的扩展,具体是通过 BeanPostProcessor 实现,如果你通过源码熟悉了 AOP 的底层原理,那么事务管理等基于 AOP 来实现的特性,也就非常容易理解了。

紧贴主线

由于 Spring 已经发展成了一个功能非常完善的框架,因此代码量巨大,组件与组件之间的关系错综复杂,因此,在阅读源码的时候,非常容易迷失,陷入到无尽的分支逻辑中。因此,我的建议是,一开始,只考虑最主要的主线逻辑,不考虑细枝末节,这样能够让思路保持在主线中。

比如,分析基于 XML 配置文件的 Spring 上下文的创建,你可以先写一个最简单的 XML 配置文件,在阅读源码的过程中,只对这个配置文件会执行的流程做分析,这样,可以一条主线把创建上下文实例的逻辑走完,等到对它非常熟悉的时候,再去考虑多的细枝末节。

及时总结

由于 Spring 代码量巨大,涉及到的逻辑线也非常多,经常容易看完后面的,忘记前面的,因此,要记得看完一部分及时总结。总结可以是一个流程图、一篇文章,或者任何你认为合适的方式,一来可以加深记忆,二来可以复习和会刊。

记得分享

另外,如果能把自己的收获分享给别人,无论对别人还是自己,都是一个非常好的学习的方式。

目录
相关文章
|
19天前
|
Java 应用服务中间件 Nacos
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
31 0
|
22天前
|
监控 数据可视化 安全
一套成熟的Spring Cloud智慧工地平台源码,自主版权,开箱即用
这是一套基于Spring Cloud的智慧工地管理平台源码,具备自主版权,易于使用。平台运用现代技术如物联网、大数据等改进工地管理,服务包括建设各方,提供人员、车辆、视频监控等七大维度的管理。特色在于可视化管理、智能报警、移动办公和分布计算存储。功能涵盖劳务实名制管理、智能考勤、视频监控AI识别、危大工程监控、环境监测、材料管理和进度管理等,实现工地安全、高效的智慧化管理。
|
1月前
|
消息中间件 NoSQL Java
Spring Cloud项目实战Spring Cloud视频教程 含源码
Spring Cloud项目实战Spring Cloud视频教程 含源码
33 1
|
2月前
|
设计模式 Java Spring
【Spring源码】WebSocket做推送动作的底层实例是谁
我们都知道WebSocket可以主动推送消息给用户,那做推送动作的底层实例究竟是谁?我们先整体看下整个模块的组织机构。可以看到handleMessage方法定义了每个消息格式采用不同的消息处理方法,而这些方法该类并**没有实现**,而是留给了子类去实现。
27 1
【Spring源码】WebSocket做推送动作的底层实例是谁
|
2月前
|
存储 设计模式 Java
【Spring源码】Bean采用什么数据结构进行存储
我们再来看看中间新加入的阅读线索4,不知大家忘记了没。我们可以对照图片1的代码组织结构,发现这些没存储在包里的功能类都是比较杂乱的,想必是Spring觉得目前这些功能类还构不成一个包的体系,可能后面规模更大会统一集成起来管理。
29 1
【Spring源码】Bean采用什么数据结构进行存储
|
1天前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
8 2
|
4天前
|
存储 前端开发 Java
Spring Boot自动装配的源码学习
【4月更文挑战第8天】Spring Boot自动装配是其核心机制之一,其设计目标是在应用程序启动时,自动配置所需的各种组件,使得应用程序的开发和部署变得更加简单和高效。下面是关于Spring Boot自动装配的源码学习知识点及实战。
13 1
|
5天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
47 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
13天前
|
设计模式 安全 Java
【初学者慎入】Spring源码中的16种设计模式实现
以上是威哥给大家整理了16种常见的设计模式在 Spring 源码中的运用,学习 Spring 源码成为了 Java 程序员的标配,你还知道Spring 中哪些源码中运用了设计模式,欢迎留言与威哥交流。
|
17天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)