作者:小傅哥

博客:https://bugstack.cn

沉淀、分享、成长,让自己和他人都能有所收获!

一、为什么手写Spring

这个与我们码农朝夕相处的 Spring,就像睡在你身边的媳妇,你知道找她要吃、要喝、要零花钱、要买皮肤。但你不知道她的仓库共有多少存粮、也不知道她是买了理财还是存了银行。 开个玩笑,接下来我要正经了!


为什么 Spring 天天用,但要想去读一读源码,怎么就那么难!因为由Java和J2EE开发领域的专家 Rod Johnson 于 2002 年提出并随后创建的 Spring 框架,随着 JDK 版本和市场需要发展至今,至今它已经越来越大了!

当你阅读它的源码你会感觉:

  1. 怎么这代码跳来跳去的,根本不是像自己写代码一样那么单纯
  2. 为什么那么多的接口和接口继承,类A继承的类B还实现了类A实现的接口X
  3. 简单工厂、工厂方法、代理模式、观察者模式,怎么用了会有这样多的设计模式使用
  4. 又是资源加载、又是应用上下文、又是IOC、又是AOP、贯穿的还有 Bean 的声明周期,一片一片的代码从哪下手

如果只是支离破碎的背点不成体系的Spring知识,你想完整的画出一个 Spring Bean 对象的生命周期都很难! 亲身经历,整整花费了3个月才把 Spring Bean 的生命周期全部摸透彻,有多透;知道了扫描加载对象定义BeanDefintion属性占位符BeanFacePost在Bean对象实例化之前提供修改BeanDefintion属性的机制Bean对象JDK和Cglib实例化Aware感知接口BeanPostProcessor在对象执行初始化时的前置和后置处理对象的作用域虚拟机注册钩子执行销毁等等,我把它们放到一张图里,如下:



在我汇总的这份资料,是以 Spring 源码学习为目的,通过手写简化版 Spring 框架 small-spring,了解 Spring 核心原理。在手写的过程中会简化 Spring 源码,摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。

二、下载我整理的PDF

用了3个月的时间,整理写出一整套简化版的 Spring 源码,同时也把对应每一个实现的步骤都编写了文章,介绍设计思路、实现过程以及知识的扩展,希望这样的资料也能帮助你成为 Spring 的“精通”者,至少看过以后你可以不那么费力的阅读Spring源码了!

small-springhttps://github.com/fuzhengwei/small-spring


读者交流在学习的过程中,遇到任何问题,欢迎给我提交issue

Hello, world of spring ! 你好,spring的世界!

欢迎来到这里,很高兴你能拿到这本书。如果你能坚持看完书中每章节的内容,那么不仅可以在你的面试求职上有所帮助,也更能让你对 Spring 核心技术有更加深入的学习。

本仓库以 Spring 源码学习为目的,通过手写简化版 Spring 框架,了解 Spring 核心原理。

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

小傅哥,之所以开始撸Spring源码,主要就是因为在编写《面经手册》时,涉及到的Spring源码都会写很多的文字描述、绘制冗长的流程图稿、做不少的内容铺垫,但对于新人来说想直接学习这部分内容仍是非常困难的,那么现在为了让我以及更多的伙伴能有一个学习的抓手,我们来一起研究研究什么是快乐星球!


  1. 此专栏为实战编码类资料,在学习的过程中需要结合文中每个章节里,要解决的目标,进行的思路设计,带入到编码实操过程。在学习编码的同时也最好理解关于这部分内容为什么这样的实现,它用到了哪样的设计模式,采用了什么手段做了什么样的职责分离。只有通过这样的学习才能更好的理解和掌握 Spring 源码的实现过程,也能帮助你在以后的深入学习和实践应用的过程中打下一个扎实的基础。

  2. 另外此专栏内容的学习上结合了设计模式,下对应了SpringBoot 中间件设计和开发,所以读者在学习的过程中如果遇到不理解的设计模式可以翻阅相应的资料,在学习完 Spring 后还可以结合中间件的内容进行练习。

  3. 源码:此专栏涉及到的源码已经全部整合到当前工程下,可以与章节中对应的案例源码一一匹配上。大家拿到整套工程可以直接运行,也可以把每个章节对应的源码工程单独打开运行。

  4. 如果你在学习的过程中遇到什么问题,包括:不能运行、优化意见、文字错误等任何问题都可以提交issue,也可以联系作者:小傅哥 的微信,fustack

  5. 在专栏的内容编写中,每一个章节都提供了清晰的设计图稿和对应的类图,所以学习过程中一定不要只是在乎代码是怎么编写的,更重要的是理解这些设计的内容是如何来的。

三、书籍目录

代码仓库https://github.com/fuzhengwei/small-spring

容器篇: IOC

  • 第01章:开篇介绍
  • 第02章:创建简单的Bean容器
  • 第03章:实现Bean的定义、注册、获取
  • 第04章:对象实例化策略
  • 第05章:注入属性和依赖对象
  • 第06章:资源加载器解析文件注册对象
  • 第07章:应用上下文
  • 第08章:初始化和销毁方法
  • 第09章:Aware感知容器对象
  • 第10章:对象作用域和FactoryBean
  • 第11章:容器事件和事件监听器

代理篇: AOP

  • 第12章:基于JDK、CGlib实现AOP切面
  • 第13章:把AOP扩展到Bean的生命周期
  • 第14章:自动扫描Bean对象注册
  • 第15章:通过注解注入属性信息
  • 【PDF专属】第16章:给代理对象设置属性注入

高级篇:Design

  • 【PDF专属】第17章:三级缓存处理循环依赖
  • 【PDF专属】第18章:数据类型转换

四、收尾

心怀天下,声色犬“码”。生有热烈,藏于俗常!

19.8、20.8、21.8,满满的都算上,小傅哥已经在这条路上摸索了两年多了,从没有粉丝基础没有写作经验没有技术文章沉淀、当然也没有运营技巧,一步步走来遇到了很多粉丝伙伴的支持、号主朋友的关心、平台运营的帮助,慢慢的长成了一颗倔强的技术小树!

两年多来,写了8个专题,22个类别,255篇+文章!并于 2021年04月23日,图书节,我的第一本技术书《重学Java设计模式》出版了。不久以后我感受过图书冲榜到销量榜第一、在图书馆看到我的技术书、被国外的粉丝伙伴购买带出国门,还看到有个女孩买来作为礼物送给他的男友。也于不久后看到百度百科还有我书籍的信息,还真是蛮开心的,但不膨胀

也祝大家,能在自己的路上坚持的走下去,长久的沉淀势必会收获到你想要的哪些旅途上的果实。

small-spring 代码贡献者3个月,敢说精通Spring了,分享我的总结!的更多相关文章

  1. 2015年12月10日 spring初级知识讲解(二)最小化Spring XML配置 注解

    序,随着Spring容器管理Bean数量增加,XML文件会越来越大,而且纯手工配置XML很繁琐,Spring和JAVA都提供了一些注解方式用以简化XML配置. 目录 一.自动装配(autowiring ...

  2. Spring Security 源码分析(四):Spring Social实现微信社交登录

    社交登录又称作社会化登录(Social Login),是指网站的用户可以使用腾讯QQ.人人网.开心网.新浪微博.搜狐微博.腾讯微博.淘宝.豆瓣.MSN.Google等社会化媒体账号登录该网站. 前言 ...

  3. 75. Spring Boot 定制URL匹配规则【从零开始学Spring Boot】

    在之前有一篇文章说了,博客名称从原来的<从零开始学Spring Boot>更改为<Spring Boot常见异常汇总>,后来写了几篇文章之后发展,有些文章还是一些知识点,所以后 ...

  4. spring boot:使mybatis访问多个druid数据源(spring boot 2.3.2)

    一,为什么要使用多个数据源? 1,什么情况下需要使用多个数据源? 当我们需要访问不同的数据库时,则需要配置配置多个数据源, 例如:电商的业务数据库(包括用户/商品/订单等)            和统 ...

  5. Spring学习4-面向切面(AOP)之Spring接口方式

    一.初识AOP    关于AOP的学习可以参看帮助文档:spring-3.2.0.M2\docs\reference\html目录下index.html的相关章节       1.AOP:Aspect ...

  6. spring实战六之使用基于java配置的Spring

    之前接触的都是基于XML配置的Spring,Spring3.0开始可以几乎不使用XML而使用纯粹的java代码来配置Spring应用.使用基于java配置的Spring的步骤如下: 1. 创建基于ja ...

  7. 非spring组件servlet、filter、interceptor中注入spring bean

    问题:在filter和interceptor中经常需要调用Spring的bean,filter也是配置在web.xml中的,请问一下这样调用的话,filter中调用Spring的某个bean,这个be ...

  8. 牛人眼中如何精通spring?

    现在市场上,spring框架很火,很多公司面试题直接将spring中某个api拿出来考面试人员,我去东南融通就遇到了这个情况,我拒绝做这些没有水准的试题,如果公司非让让我做,我想这样的公司也不值得我来 ...

  9. 【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)

    文件夹      [SSH进阶之路]一步步重构容器实现Spring框架--从一个简单的容器開始(八)      [SSH进阶之路]一步步重构容器实现Spring框架--解决容器对组件的"侵入 ...

随机推荐

  1. 乘风破浪,.Net Core遇见MAUI(.NET Multi-platform App UI),进击现代化跨设备应用框架

    什么是MAUI https://github.com/dotnet/maui .NET Multi-platform App UI (MAUI) 的前身是Xamarin.Forms(适用于Androi ...

  2. 如何获取微信小程序for循环的index

    在微信小程序开发中,对于wx:for,可以使用wx:for-index="index"来获取数组中的元素的索引值(下标). <view class="item&qu ...

  3. MindSpore模型精度调优实战:常用的定位精度调试调优思路

    摘要:在模型的开发过程中,精度达不到预期常常让人头疼.为了帮助用户解决模型调试调优的问题,我们为MindSpore量身定做了可视化调试调优组件:MindInsight. 本文分享自华为云社区<技 ...

  4. Spring中如何使用自定义注解搭配@Import引入内外部配置并完成某一功能的启用

    文章背景 有一个封装 RocketMq 的 client 的需求,用来提供给各项目收.发消息,但是项目当中常常只使用收或者发消息的单一功能,而且不同的项目 group 等并不相同而且不会变化,可以在项 ...

  5. 单点登录(SSO)实现原理(转)

    简介 单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些知名的大型网站,如:淘 ...

  6. celery task异步任务

    业务端后台:通过python manage运行 运行用例时,用python manage运行时会卡,影响效率 celery task 本身自己也是个服务,异步处理case 异步:小明去给我买个东西,我 ...

  7. File类与常用IO流第二章过滤器

    在第一章中,有一个练习使用递归搜索文件 1 public static void main(String[] args) { 2 File f=new File("E:\\aaa" ...

  8. Python开发篇——构建虚拟Python开发环境(Conda+Poetry)

    前言 之前虽略有提及Python,但是没有实际地写点料.惭愧,惭愧,所以这次先起个头,讲讲如何构建虚拟Python开发环境.相信之前看过我博客的人可能会想:博主不会又要聊聊Docker吧?放心,不会. ...

  9. 电子物流中的EDI 应用

    电子物流中的EDI 应用 背景 EDI 全称是Electronic data interchange, 即电子数据交换.在传统企业里,很多流程上的操作或者通信一般是由纸质媒介完成的,比如说采购订单.发 ...

  10. 运行ride.py报错,闪退

    报错信息如下: F:\Python3.8\Scripts>python ride.py<class 'robotide.preferences.configobj.UnreprError' ...