《Spring 手撸专栏》第 1 章:开篇介绍,我要带你撸 Spring 啦!

简介: 一、前言二、目标三、计划四、源码五、总结六、系列推荐

目录


  • 一、前言
  • 二、目标
  • 三、计划
  • 四、源码
  • 五、总结
  • 六、系列推荐


一、前言

不正经!写写面经,去撸Spring源码啦🌶?

是的,在写了4篇关于Spring核心源码的面经内容后,我决定要去手撸一个Spring了。为啥这么干呢?因为所有我想写的内容,都希望它是以理科思维理解为目的的学会,而不是靠着硬背记住。而目前面经中涉及到的每一篇Spring源码内容分析,在即使去掉部分非主流逻辑后,依然会显得非常庞大。对有经验的老司机尚可阅读几遍接受,但就新人来讲只能放入收藏夹吃灰啦!

20.jpg

可能已经阅读过 2.5k下载量《Java面经手册》的小伙伴会知晓,这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、斐波那契(Fibonacci)散列法还有黄金分割点的使用等等。

所以在编写面经手册关于 Spring 系列时,我也希望它是一项有益于程序员真正成长的技术资料和价值汇总,而不仅仅是对一些列繁杂内容的罗列。那么从借鉴 tiny-spring、mini-spring 以及对我对Spring的学习和常折腾开发中间件的经验上,来编写一款适合自己沉淀也满足于大家学习的Spring资料。

傅哥的面经都是”假“的,一上来就学数学、撸源码、挖核心! 好!既然你这么说,接下来我们定义目标计划,开始撸源码

二、目标

image.gif21.jpg

本仓库以 Spring 源码学习为目的,通过带着读者一点点手写简化版 Spring 框架,了解 Spring 核心原理,为后续再深入学习 Spring 打下基础。

在手写的过程中会剔除 Spring 源码中繁杂的内容,摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。

所有的内容实现都会由简开始,一步步带着大家实现,最终所有的内容完成后,在提供一个相对完整的 small-spring,在这个过程中只要你能跟着走下来,那么最后你一定可以较容易的阅读 Spring 源码了。

三、计划

22.jpgimage.gif

原定这周已经准备了 Spring AOP 筛选通知器的相关文章,源码已经撸好了。但发现这样发下去我估计阅读量是要劈叉,多数都进收藏夹。

写一篇文章最大的希望是与读者互动起来,不怕你提提意见,就怕你不给三连!所有读者给出的留言、评论、点赞、分享,都是下一篇文章的120迈动力的开始,所以这篇文章的源码撸完后,决定该把 Spring 整理整理了,不仅让我自己有一个学习的过程沉淀感,也让读者能真的学会这部分内容。背,那是八股文,懂,才能涨姿势!

讲道理,其实我也是一个乐于手撸源码的主,因为从源码的学习中我可以拿到一部分在业务系统开发过程中,不太可能接触到的技术内容。而这部分从源码中学到的技术内容又可以复用到业务系统开发中,例如我写过的很多中间件以及设计模式,都来自于对框架源码的内容的挖掘和运用。

那 Spring 框架源码撸多少了?

截止到目前为止,已经写好了四个章节的案例源码,主要包括:容器创建、Bean的定义和注册、构造实例、属性填充,因为最开始的内容比较简单,所以写起来也会比较快。目录结构如下,后续继续补充章节:

  • [x] 第 1 章:开篇介绍,手写Spring能给你带来什么?
  • [x] 第 2 章:Spring Bean 容器创建 | small-spring-step-01
  • [x] 第 3 章:Spring Bean 的定义和注册 | small-spring-step-02
  • [x] 第 4 章:Spring Bean 构造函数实例化策略以及Cglib动态生成使用 | small-spring-step-03
  • [x] 第 5 章:给 Bean 对象填充属性信息 | small-spring-step-04
  • [ ] 第 6 章:待归档...

站在我的角度撸源码要比写文章快,哪怕是非常简单的知识点,也要做既不繁杂冗余的介绍,也要能把知识的广度和深度讲清楚。所以在这个过程中我也会阅读不少资料以及官网上的文档,最终把相对那些符合当前章节有价值的内容,展示给读者学习,同时这也是个人对技术内容的一个积累。

四、源码

本章节是整个 Spring 手撸专栏的开篇,所以这里先把源码地址以及学习使用方式交代给读者,方便后续大家在后续可以顺利的学习到这部分内容。

23.jpg

五、总结

  • 当你阅读 Spring 源码时你会看到各种的嵌套、递归、代理,以及可能连想调试时都不清楚断点要打在哪里,运行起来的程序跳来跳去。最终导致自己也就看不下去这份源码了!这是因为 Spring 发展的太久了,它为了满足不同的场景,已经做了太多的补充和优化,所以我们要做的是剥丝抽茧,体现核心,把最直接相干的内容体现出来进行学习,才更容易理解。
  • 在源码学习的过程中,小傅哥会和你一起从最简单、最简单的Bean容器开始,可能有些时候某些章节内容并不会太多,不过我会帮你建立一些知识关联,尽可能让你在这个学习过程中,收获更多。
  • 那么本章节关于 Spring 手撸专栏的开篇介绍就到这了,接下来你可以阅读到文章、获取到源码,直至我们把所有的内容全部完成,到时候就可以开发出一个相对完整的 Spring 框架了。希望在这个过程中你能和我一直坚持学习打卡!
目录
相关文章
|
消息中间件 前端开发 安全
【开篇 | Spring深度学习】Spring设计理念和整体架构
【开篇 | Spring深度学习】Spring设计理念和整体架构
83 0
|
前端开发 Java Spring
Spring MVC源码 - 00开篇主题框架一览
Spring MVC源码 - 00开篇主题框架一览
91 0
Spring MVC源码 - 00开篇主题框架一览
|
XML 开发框架 Java
《Spring核心技术》开篇:我要带你一步步调试Spring6.0源码啦!
沉淀,成长,突破,帮助他人,成就自我。
371 0
《Spring核心技术》开篇:我要带你一步步调试Spring6.0源码啦!
|
XML 设计模式 Java
《Spring 手撸专栏》第 6 章:气吞山河,设计与实现资源加载器,从Spring.xml解析和注册Bean对象
实现 1. 工程结构 2. 资源加载接口定义和实现 3. 包装资源加载器 4. Bean定义读取接口 5. Bean定义抽象类实现 6. 解析XML处理Bean注册 测试 1. 事先准备 2. 配置文件 3. 单元测试(资源加载) 4. 单元测试(配置文件注册Bean)
131 0
|
消息中间件 Java Serverless
开篇:在Spring生态中玩转RocketMQ
开篇:在Spring生态中玩转RocketMQ
开篇:在Spring生态中玩转RocketMQ
|
Java 数据库 容器
spring源码-开篇
  一、写博客也有一段时间了,感觉东西越来越多了,但是自己掌握的东西越来越少了,很多时候自己也在想。学那么多东西,到头来知道的东西越来越少了。是不是很奇怪,其实一点都不奇怪。   我最近发现了一个很大的问题,就是自己做开发这么久了。
2166 0
|
Java Spring
Spring系列之AOP分析开篇(一)
在开始Spring的AOP分析之前,先来看一个很老的一个问题。。。假设你在开发的过程中,需要在类A中的方法之前执行一些逻辑(我们称为逻辑A),你可能的一个做法是直接修改类A中的方法,在类A中的方法的开始处写上要添加的代码,你还可能会给类A生成一个代理类,去对调用方法进行拦截,在代理类里面去执行相应的逻辑(逻辑A)。
4648 0
|
Web App开发 Java 数据库
Spring源码剖析开篇:Spring概述
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/73033273 欢迎阅读完整的专栏博客内容:Spring源码解析 本文首发于我的个人公众号:程序员江湖 努力成为最有影响力的程序员自媒体,专注于面试,职场,个人提升三大主题。
|
存储 安全 Java
spring帝国-开篇
 spring简介:     spring是一个开源框架,spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。
1085 0
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
245 2

相关实验场景

更多