文章目录
- 一、Spring概览
- 1、作者介绍
- 2、Spring架构概览
- 3、Spring源码阅读感悟(一人之见)
- 二、Spring环境搭建
- 1、源码环境搭建
- 2、我的源码项目介绍
- 2.1 项目介绍
- 2.2 个人源码学习经验
- 三、总结
一、Spring概览
1、作者介绍
Spring Framework创始人Rod Johnson。 Rod在悉尼大学不仅获得了计算机学位,同时还获得了音乐学位。更令人吃惊的是在回到软件开发领域之前,他还获得了音乐学的博士学位,经历很丰富,是一个具有创造性的大神。
Spring这个开源的生态圈,是真的牛逼,可以说目前大部分工业级的Java软件开发基本离不开Spring,使用了Spring可以减少非常多的样板代码,程序员可以更关注业务本身的逻辑。
2、Spring架构概览
在官网截取了Spring框架架构图,在上述图中Core Container是Spring的核心模块,也是Spring最关键的核心模块。
Core Container包含beans、core、context和expression(SpEL)。除去Core Container模块之外,AOP模块是属于Spring体系的第二大重点模块,大部分其他增强类组件都是基于AOP来实现的。
在我的日常开发过程中,经常会使用AOP的技术去做一些小工具,如任务线程独立的日志ID分配,可以使得查看或检索日志时通过独立的ID检索出请求全链路的日志,或者是基于AOP实现自定义Redis注解方法返回值缓存,减少代码逻辑层面的侵入型,又或者是开发方法监控信息等组件。
3、Spring源码阅读感悟(一人之见)
Spring框架的源码阅读起来很困难,由于在框架中大量使用了模版方法模式,使得代码阅读时需要熟记各个类之间的继承关系。基础类定义模版方法并开放子类实现方法,子类继承父类实现父类开放的方法。这样的设计实现固然对开扩展很友好,但是在阅读时会比较吃力。
Spring虽然继承结构复杂,但是读过之后会有很多值得我们编码借鉴的地方,其中运用了多种设计模式,模版设计模式,装饰者设计模式等。
Spring框架如果仅仅是在使用层面,大家百度一些注解的使用即可。如@Service、@Controller、@Component、@Bean、@PostConstruct、@Import、@Resource等。使用起来简单有效。如果期望基于Spring去开发一些底层的工具,就需要了解其原理,以便于你开发的工具可以更好的配置在其他的项目之中。
小提示:日常code review中经常会提到 “常规的一些基础类工具,强制使用Google、Apache权威的开源社区的开发的工具” ,这会联想到上方重复造轮子的事情,善用权威的开源框架可以让自己的代码更简单更健壮。
二、Spring环境搭建
1、源码环境搭建
- 阅读源码需要一个IDE,推荐当下最火的Intelj IDEA。
- JDK的版本推荐选择1.8版本。
- 下载Spring源码,提供一下我在学习Spring的时候的源码项目下载地址。
https://github.com/muzi-code/spring-ecological-technology - IDEA导入代码,安装Gradle 4.4.1,使用gradle -version来查看是否安装成功。
上面我的代码是我处理过的,可以编译通过。
2、我的源码项目介绍
2.1 项目介绍
项目包含:
- Spring-Framework 源码项目
- spring-framework-exercise 学习项目
2.2 个人源码学习经验
关于Spring源码分析,实际上就是先使用Spring支持的Bean标签的一些属性,尝试在Spring容器初始化过程中DEBUG,跟着代码执行流程把相关的源代码过一遍,并加上一些自己的注释。反复的通过尝试没用过的属性和没用过的功能去DEBUG,看流程,理论和实践相结合,肯定会有所收获。
正常看Spring源码的时候可能看看就会忘就会枯燥,无趣的很。不过通过写一些功能的代码案例,点点累积,直至看完一整遍后,自身对Spring框架的掌握就会上一个层次。时至目前我看过很多遍Spring代码,但是一些业务代码我也不知其意。
不求甚解,每有会意便欣然忘食,才是阅读Spring源码的心态。
我的源码项目中包含spring-framework-exercise这个练习项目,练习项目中包含了我学习Spring的很多练习,时至今日有一些功能开发我还要借鉴我曾经的练习Demo。
三、总结
其实Spring项目就算学的超级NB,摸清了每一行的代码的逻辑,它也不能让你的技术有很大的提升(提升肯定是有的,因为现实就是很多人不是很会Spring的高级应用),但是可以让你的Spring项目看起来更舒服(懂的人都懂)。
习武之人有内功和外功的区分,程序员的提升也分内外,内在主要是设计思想和编码能力,外在体现就是跟随技术的发展,善用最新的框架或中间件。