# Java项目推荐:手撕spring项目(第三版) | 代码随想录知识星球
在25年年初,星球发布 手写spring项目 (opens new window) 。
之后,不断对这个项目进行完善。
在 25年4月份,发布了第二版 (opens new window)
今天知识星球正式发布手写spring框架第三版。
在第三版中,大家之前反馈的问题全部修正,同时优化了讲解思路。
真正做到让大家可以跟着专栏一步一步实现手写spring。
同时,知识星球里每个项目都配备专属答疑微信群,有问题在群里提问,随时解答大家在学习这个项目时候遇到的困惑。
# 本项目阐述
实现一个min-spring框架 是一个 不错的轮子项目。
为什么推荐实现这个轮子呢,因为做完这个项目。
不仅仅是简历上多了一个硬核项目,同时你会发现 平时自己死记硬背的spring八股文 一下子可以活学活用了。
本项目可以结合很多八股文知识,这是和写业务项目的不同之处。
做完本项目后,你将收获:
- 简历上增加一个硬核的项目
- 深入理解Spring核心原理
- 掌握框架设计的关键技术
- 提升架构设计能力
- 能够回答相关面试题
- 具备框架开发能力
# 手写spring第三版教程介绍
本教程共分为三个部分,循序渐进,从基础到核心实现,再到简历与面试内容。
1、第一部分 · 项目基础
Mini-Spring 打包与引用:主要内容为怎么将本项目运行起来,并引入到其他项目中使用。
Mini-Spring 项目结构:详细解析项目中各个文件夹的作用,帮助快速定位与阅读源码。
2、第二部分 · 核心实现
本教程的核心内容,介绍了 IoC 与 AOP 两大模块的源码与设计思路。
● IoC 容器
从控制反转(IoC)到依赖注入(DI),逐步讲解 Bean 的注册、加载、注入等完整流程。
● AOP 模块
讲解 AOP 的底层实现,涵盖动态代理、静态代理、切点匹配、通知类型等核心机制。
3、第三部分 · 项目输出
简历写法:教你如何将本项目写进简历,突出亮点与技术深度。
项目面试题(原理性):总结本项目涉及的高频原理类面试题,涵盖 IoC、AOP、Bean 生命周期、代理机制等。
# 专栏编写逻辑
对于一个模拟 Spring 的项目来说,我们对核心内容做了极度精简
在 IoC 容器 这一块,教程会先铺垫基础:什么是控制反转(IoC)、依赖注入(DI),以及 Mini-Spring 整体的结构长什么样。
有了这些基本认知和全局视角之后,我们会用 Bean 生命周期解析流程,带你把 IoC 核心实现过一遍。
这个流程是 IoC 模块的重点,掌握了这条主线,剩下的分支逻辑你自己看也能读懂。
这样下来,你不仅能理解 Mini-Spring,还能在脑子里构建出属于自己的 Spring 框架结构图。
在 AOP 模块 里,套路也差不多。
我们会先把 AOP 里那些比较绕的术语概念讲明白,然后聊聊动态代理和静态代理的区别。
讲静态代理的重点是让你真正理解“什么是代理”,而动态代理更多是帮你明白“什么叫动态”。
等这两个概念理解清楚之后,第三部分的 AOP 实现解析 基本就是前两个部分的结合体,学习起来会很自然。
# Mini-Spring 基于 XML 实现
Mini-Spring 用于管理 Bean 的配置的实现仍然选择 XML 文件,并不是现代 Spring 常用的注解的方式。
两种方式区别如下:
- XML 是显式配置:类名,属性,依赖,作用域等都需要手动配置
- 注解只需要通过一个 @Autowired,Spring 全都自动配置了
从学习的角度上来说,通过 XML 能更清晰的了解 Bean 是怎么一步一步生成的,能够更好的理解 IoC 的本质,理解 BeanDefinition 的注册流程。
同时,这个流程也是本教程的最核心的主线,当这个核心的主线走完,你会学到:
- XML 文件是怎么被定位的
- Bean 是怎么从 XML 文件中被解析出来的
- Bean 的依赖是怎么被注入的
- 懒加载,初始化方法,作用域如何配置
- 如何对外提供实例化后的对象
这对理解整个 IoC 容器的原理是非常珍贵的。
最后,在使用 XML 的时候,我们通常需要自己搭建容器,即以下操作:
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
MyService service = ctx.getBean("myService", MyService.class);
2
在这个使用的过程中,可以知道:
- ApplicationContext 是什么
- 它的继承结构是什么
- 它的子类是怎么工作的
总之,Mini-Spring 以 XML 作为 Bean 的配置文件起步,一步步实现的 IoC 容器,这个过程是一个很好的学习入口。
# 简历写法
学完了本项目,简历应该怎么写,项目专栏直接给出来了:
# 面试问题
很多录友做完一个项目了,不知道面试会被问到什么问题,或者说,自己就没时间写代码了 只能直接去看面试题,来突击这个项目。
项目专栏给出具体面试问题和回答:
# 项目专栏详情
首先,我们要知道这个项目,如果从零搭建起来,这对初学者很重要。
项目结构怎么划分,写的代码文件应该存放在那个文件夹下,文件夹之间的关系应该怎么组织?
这是每个人在做体量稍微大一些的项目时都会遇到的问题。
在我看来这个问题的难度不亚于怎么给变量取名。。。
所以项目架构一定要给大家讲清楚:
接着就是具体内容讲解:
# 突击来用
如果大家面试在即,实在没时间做项目了,可以直接按照专栏给出的简历写法,写到简历上,然后把项目专栏里的面试问题,都认真背一背就好了,基本覆盖 绝大多数 本项目问题。
# 项目代码
Github地址:https://github.com/youngyangyang04/mini-spring
欢迎star、fork
# 获取本项目专栏
本文档仅为星球内部专享,大家可以加入知识星球里获取,在星球置顶一:
加入星球后可以获取全部项目文档和八股资料!。


这里给出10元代金券,领代金券加入,代码随想录知识星球支持三天内(72h)可以全额退款。

加入知识星球后,记得加如下微信,发动付款截图,拉你到星球交流群:
