总结丨Spring 源码学习,看这一篇就够了

简介: 在日常工作中,产品不断写业务需求,他们加班一天,我们开发就得工作一周来完成。业务领域达到一定地步后,发现日常编写业务代码已经很难让我有突破性的进步,日复一日,担心自己变成一个业务代码生产机器,而无法面对新技术和环境变化。同时也有危机感,长江后浪推前浪,自己不继续学习的话,很快就会有人超过。而且我算是比较热心的好同学,喜欢帮别人解决问题和记录解决方案,所以不希望在别人问我工作中有什么常用的框架,遇到这个问题该怎么办,我却回答不上的感觉

笔记项目地址

首先给出这段时间以来的总结:

https://github.com/Vip-Augus/spring-analysis-note

为什么读源码

在日常工作中,产品不断写业务需求,他们加班一天,我们开发就得工作一周来完成。

业务领域达到一定地步后,发现日常编写业务代码已经很难让我有突破性的进步,日复一日,担心自己变成一个业务代码生产机器,而无法面对新技术和环境变化。

同时也有危机感,长江后浪推前浪,自己不继续学习的话,很快就会有人超过。

而且我算是比较热心的好同学,喜欢帮别人解决问题和记录解决方案,所以不希望在别人问我工作中有什么常用的框架,遇到这个问题该怎么办,我却回答不上的感觉

同样,希望大家懂得提问的艺术,通过度娘和谷歌都没找到解决方案后,再去与别人探讨问题,不然会被鄙视的,别问我为啥懂得/(ㄒoㄒ)/

所以就沉下心来,从工作中一直在用的 Spring 框架源码学起,看看大牛们的代码设计。


怎么读源码

虽然我拿 Spring 作为例子,但模板可以套用到你想阅读的任何源码上~


查官方文档

https://docs.spring.io/spring/docs/current/spring-framework-reference/

1.jpg

可以说,开源框架的官方文档是最完整,最全面的使用和说明介绍,详细到每行代码的用途和异常都有说明(大雾),反正只有想不到,没有官方文档没写的。

如果在运行当中,跟官方文档不符合的场景,应该算 BUG,那么读者发现了,可以给他们提 ISSUE,为开源生态圈做出自己的一份贡献~


查技术社区

很多开源框架的文档是英文写的,这是个不争的事实,所以直接看英文的话,会很吃力。

但国内也有大牛和大神,我们会从中学习,然后不断改良和吸收优点,然后再创建更符合国内需求的框架。极客们会将翻译或者改良建议公布到网络,与我们大家进行分享。

例如去 CSDN、 掘金和思否等技术社区,都已经有人翻译或者写了自己的见解,我们先从中文文档学习,遇到疑惑或者官方文档更新了,与官方文档比对后,得出自己最后的结论和使用方法。


总结与分享

我喜欢学习,但讨厌无意义的学习

之前看到微笑大神在 知识星球「Java极客技术」里写的主题「如何高效的学习」:

文章中提到了“学习金字塔”模型,有以下七个层次:

1 听讲

2 阅读

3 视听

4 演示

5 讨论

6 实践

7 教给他人

然后学习内容的保留率从上往下依次递增:

2.jpg

9b6abed3e6b0831bab89d6067a17280d.png

下面是两者对比后得出的结论:


减少被动学习

我们上学时经历过太多的被动学习,高中时还好,老师上课时,台下的学生认真听讲,下课后还记得老师在课堂上讲的大部分内容。

但到了大学后,台下的学生更多,老师无法兼顾这么多学生,学生也有很多课堂外的活动,还记得有张动图,两个学生在上高数课,老师在黑板上写了几行公式,然后学生瞌睡,眯眼了一会,睁开眼睛,发现黑板上写满了高等数学定理…

所以只是看书看视频却不动手实践,这样被动学习的效率低,如果到最后忘得一干二净,这样的学习会显得无意义。


学会主动学习

我也认为学习不是一步登天,也不可能将自己只看过一次的内容完全记牢,跟微笑哥一样,我一年前看过 jvm 的知识,后来工作中用得比较少,在需要用到的时候,我又回去看了一遍书本,后来我将这些常用的命令总结了一下,在后来使用时,一边翻阅笔记,同时命令行敲得更快了一点!

网上也有很多学习视频,看视频的同时,要自己敲下代码,能够正常运行起来,成功运行时会有一种成就感,同时也会加深自己的理解,可以在下次遇到相似场景时进行借鉴,去解决实际问题。

所以不能再局限于被动学习的阶段,这样很容易学了就忘,要踏出一步,主动学习,动手实践,然后进行总结和分享,不断进行输出,让学习更有意义~


从中收获了什么

这里的收获也有两种类型:

目标收获

  1. 加深了 Spring 框架的基础结构
    对 IoC、 Aop 和 MVC 等基础概念有了更深的了解
  2. 良好的代码风格
    举个例子,个人感觉,在代码设计上,源码做到了高内聚,低耦合,通用和规范性的抽象到顶层类,例如看到很多 abstract抽象父类,里面做了很多复杂操作,但会提供一些模板方法,通过继承,让子类去扩展实现,在子类调用父类的方法,做到了 「关闭修改,开放扩展」。
    还有入口方法进行容易理解,罗列了关键步骤,然后复杂实现交给了子类,同时变量和方法名也很直观,看其名,知其义,注释也很多,能够减低阅读难度。
  3. 多种设计模式
    简单工厂、工厂方法、单例模式、模板方法等等,都在源码中有所体现,在了解整体结构时,可以弥补之前看设计模式书籍的不足,加深对它们的理解

(PS:「Java极客技术」知识星球里面每周都会有设计模式的分享,可以加入进去,在里面一起加深设计模式的学习)

通过上面的学习,在之后自己编码时,会注意到这些细节,然后不断提高自己的编码能力


额外收获

  1. 提升写作能力

学会一个 demo很容易,成功运行虽有点难度,但根据教程和资料,弄成功是没有问题的,难就难在写出来教会别人。

之前写的更多偏向于速记型,是为了自己查看的,根据关键信息速查,自己回顾也得花上一段时间,所以别人不一定能看懂。这次想要让自己回顾起来更快速,于是在语言组织以及格式编排上画了一点时间,尽可能的完善笔记,提升了写作的能力。

  1. 转换心情

不厚道的说一句,如今太多贩卖焦虑的推文,我也清楚明白人无忧虑和追求,是不会有所进步的。

但我也认识到,如果看到焦虑却想着不劳而获,那是更可怕的事情,一不小心就会掉落营销者他们所设的陷阱,停止了前进。

何不换种思路,心中保持担忧,但心态放轻松,不要想着不劳而获,而是克服苦难,继续增强自己的技能。所以这次的沉淀学习也是想让自己冷静下来,沉浸在书籍中,获取解决一个又一个疑问的喜悦

客观的说,我的担忧还是没有消除,但我的心态转变了一些,想要通过增长的技术体现自己的价值,在实际工作中解决实际问题,得到别人的肯定。


一千个读者有一千个哈姆雷特,同样的书籍大家的感悟应该也会不一样,以上只是个人的分享,期待听到朋友们的留言

我是惊奇,一个追求自律和技术,希望带给你惊喜和奇妙的阳光宅男~ 期待下期再会


相关文章
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
653 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
652 2
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
871 70
|
设计模式 Java 开发者
如何快速上手【Spring AOP】?从动态代理到源码剖析(下篇)
Spring AOP的实现本质上依赖于代理模式这一经典设计模式。代理模式通过引入代理对象作为目标对象的中间层,实现了对目标对象访问的控制与增强,其核心价值在于解耦核心业务逻辑与横切关注点。在框架设计中,这种模式广泛用于实现功能扩展(如远程调用、延迟加载)、行为拦截(如权限校验、异常处理)等场景,为系统提供了更高的灵活性和可维护性。
1634 0
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
2252 3
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
404 20
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
821 7
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
470 0