# 手写Spring:渐进式源码实践
作者:小傅哥
博客:https://bugstack.cn (opens new window)
原文:https://mp.weixin.qq.com/s/g7YdIe_FSrk-WE8nQRO3TA (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
# 一、前言
不正经!写写面经,去撸Spring源码啦🌶?
是的,在写了4篇关于Spring核心源码的面经内容后,我决定要去手撸一个Spring了。为啥这么干呢?因为所有我想写的内容,都希望它是以理科思维理解为目的的学会,而不是靠着硬背记住。而目前面经中涉及到的每一篇Spring源码内容分析,在即使去掉部分非主流逻辑后,依然会显得非常庞大。对有经验的老司机尚可阅读几遍接受,但就新人来讲只能放入收藏夹吃灰啦!
可能已经阅读过 2.5k下载量的 《Java面经手册》 (opens new window)的小伙伴会知晓,这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、斐波那契(Fibonacci)散列法还有黄金分割点的使用等等。
所以在编写面经手册关于 Spring 系列时,我也希望它是一项有益于程序员真正成长的技术资料和价值汇总,而不仅仅是对一些列繁杂内容的罗列。那么从借鉴 tiny-spring、mini-spring (opens new window) 以及对我对Spring的学习和常折腾开发中间件的经验上,来编写一款适合自己沉淀也满足于大家学习的Spring资料。
傅哥的面经都是“假”的,一上来就学数学、撸源码、挖核心! 好!既然你这么说,接下来我们定义目标
、计划
,开始撸源码
!
# 二、目标
本仓库以 Spring 源码学习为目的,通过带着读者一点点手写简化版 Spring 框架,了解 Spring 核心原理,为后续再深入学习 Spring 打下基础。
在手写的过程中会剔除 Spring 源码中繁杂的内容,摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。
所有的内容实现都会由简开始,一步步带着大家实现,最终所有的内容完成后,在提供一个相对完整的 small-spring,在这个过程中只要你能跟着走下来,那么最后你一定可以较容易的阅读 Spring 源码了。
# 三、目录
# 容器篇:IOC
- 第1章:开篇介绍,手写Spring能给你带来什么? (opens new window)
- 第2章:小试牛刀,实现一个简单的Bean容器 (opens new window)
- 第3章:初显身手,运用设计模式,实现 Bean 的定义、注册、获取 (opens new window)
- 第4章:崭露头角,基于Cglib实现含构造函数的类实例化策略 (opens new window)
- 第5章:一鸣惊人,为Bean对象注入属性和依赖Bean的功能实现 (opens new window)
- 第6章:气吞山河,设计与实现资源加载器,从Spring.xml解析和注册Bean对象 (opens new window)
- 第7章:所向披靡,实现应用上下文,自动识别、资源加载、扩展机制 (opens new window)
- 第8章:龙行有风,向虚拟机注册钩子,实现Bean对象的初始化和销毁方法 (opens new window)
- 第9章:虎行有雨,定义标记类型Aware接口,实现感知容器对象 (opens new window)
- 第10章:横刀跃马,关于Bean对象作用域以及FactoryBean的实现和使用 (opens new window)
- 第11章:更上层楼,基于观察者实现,容器事件和事件监听器 (opens new window)
# 代理篇:AOP
- 第12章:炉火纯青,基于JDK和Cglib动态代理,实现AOP核心功能 (opens new window)
- 第13章:行云流水,把AOP动态代理,融入到Bean的生命周期 (opens new window)
- 第14章:笑傲江湖,通过注解配置和包自动扫描的方式完成Bean对象的注册 (opens new window)
- 第15章:万人之敌,通过注解给属性注入配置和Bean对象 (opens new window)
- 第16章:战无不胜,给代理对象的属性设置值 (opens new window) —— 星球专属
# 高级篇:Design
# 五、总结
- 当你阅读 Spring 源码时你会看到各种的嵌套、递归、代理,以及可能连想调试时都不清楚断点要打在哪里,运行起来的程序跳来跳去。最终导致自己也就看不下去这份源码了!这是因为 Spring 发展的太久了,它为了满足不同的场景,已经做了太多的补充和优化,所以我们要做的是剥丝抽茧,体现核心,把最直接相干的内容体现出来进行学习,才更容易理解。
- 在源码学习的过程中,小傅哥会和你一起从最简单、最简单的Bean容器开始,可能有些时候某些章节内容并不会太多,不过我会帮你建立一些知识关联,尽可能让你在这个学习过程中,收获更多。
- 那么本章节关于
Spring 手撸
专栏的开篇介绍就到这了,接下来你可以阅读到文章、获取到源码,直至我们把所有的内容全部完成,到时候就可以开发出一个相对完整的 Spring 框架了。希望在这个过程中你能和我一直坚持学习打卡!