• Stars
    star
    222
  • Rank 179,123 (Top 4 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 2 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

《手写Spring:渐进式源码实践》 —— 书籍源码库

本项目思路和代码来自于开源项目 DerekYRC/mini-springcode4craft/tiny-spring 经过本人学习、扩展、补充,并编写文章总结经验,分享给广大读者,一起学习 Spring 源码。非常感谢开源项目贡献者,读者也可以一起学习,不同视角下的学习经验。

开源项目及优秀书籍


👨‍💻作者:小傅哥
🌱微信:fustack —— 可以添加微信备注【Spring读书群📚

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

IOCAOPSPI,Spring 给你的不只是一个开发框架,还包括它的设计思想。它通过解耦 Bean 对象的实例化过程,管理 Bean 的生命周期,来维护你在程序开发中所需对象使用过程。让你不需要刀耕火种般 new 一个对象,也不需要如 EJB 一样笨重臃肿的开发维护,而像春风一样润物(万物皆可Bean)细无声的使用。因此可以说它完全担得起 Java 技术设计的顶峰


除了运用以外,Spring 框架也是众多码农,最能最先接触到的一个源码级复杂项目。任何初出新手村蜕变的码农,寻觅苦找的锻炼项目,都不如学习 Spring 源码来的痛快。从架构设计的复杂、从分治抽象的运用、从设计模式的驾驭,Spring 框架都是顶级的,也是最能给你带来丰富收获的。


📝目录

  1. 代码仓库
  2. 本书特点
  3. 学以致用
  4. 书籍购买
  5. 勘误记录 —— 非常感谢,读者提交阅读中发现的错字和问题。

1. 本书特点

  1. 这本书最大的价值是带着想学Spring源码的读者,能有个门进去。避免像以前一样,东一榔头西一棒子没有体系化的学。
  2. 手写spring,不是为了再造一个轮子,是为了吸收更好的架构设计和编程思想。并把内容运用到实际项目,既可以解决业务的耦合实现,提升交付质量。
  3. 本书采用从零手写 Spring 的方式,摒弃 Spring 源码中繁杂的内容,选择整体框架中的核心逻辑,简化代码实现过程,保留核心功能,如 IOC、AOP、Bean 的生命周期、上下文、 作用域和资源处理、事务等。在开发过程中,细化功能模块,逐步完成一个简单版的 Spring 框架。

2. 学以致用

《手写Spring:渐进式源码实践》完成后我的能力如何体现在简历上?给个案例。

  1. 体现在专业技能上,例如;

    1. 深入学习 Spring 核心流程模块,包括;IOC、AOP、依赖倒置等流程,掌握Spring解决复杂场景所运用的分治、抽象和知识(设计模式、设计原则),在解决Spring场景问题时,可以从核心原理上给出方案。同时也具备基于 Spring 开发 SpringBoot Starter 技能,为复杂项目减少同类共性需求的开发,凝练通用的技术组件,减少研发成本。
    2. 深入学习 MyBaits 核心流程模块,包括;会话、反射、代理、事务、插件等流程,熟练掌握 ORM 框架的设计思想、实现方式和应用价值。并能按需结合 MyBatis 的插件机制,开发属于企业自己所需的功能,包括;数据分页、数据库表路由、监控日志、数据安全等方面。
  2. 体现在项目经验上,例如;—— 对校招和实习比较有用 把 Spring、MyBatis 当一个学习项目来描述,这是你在离校前,最可能接触到的一个完整的、成型的、知名的,有企业使用的,框架。你就按照自己学习并开发了这样一个框架为目标来写项目,并描述出这个项目,你用了什么技术栈,解决了什么问题,学习到了哪些。

  3. 体现在项目应用上,例如; 关于 Spring、MyBatis 的项目,一般都是插件类开发,比如各类的 SpringBoot Starter,MyBatis 插件,都是基于框架的深入整合类技术解决方案,体现在简历上,非常抓眼球。一看你就是有深度和自研能力的研发人员。—— 一般不让你造轮子,但需要你有造轮子的能力,这样企业中一些软件可以被你进行优化和修改。

  4. 体现在解决问题上,例如; 在你的自己的业务项目中,渗入一些关于解决了原项目使用 Spring 时,关于感知 Aware 方式或者结合 FactoryBean 包装对象等,所遇到的问题,因为你学习过源码,所以非常清晰这样的流程,因此解决了一个问题。通用 MyBatis 也适用于这样的描述方式,包括;事务、查询次数、批查询、插件能监听到的四个类(ParameterHandler、ResultSetHandler、StatementHandler、Executor )你给了更好的选择。

3. 书籍购买

链接下单https://u.jd.com/4LapTH4

本书共21章;

  • 第01 ~ 10章:主要介绍IOC 容器,逐步完善一个简单的Spring Bean 容器的相关功能,引入实例化策略、注入属性和依赖、设计应用上下文、处理Bean 对象的生命周期,以及实现感知容器对象的监听等。
  • 第11 ~ 12章:主要介绍AOP 切面,基于JDK、Cglib 的动态代理、方法拦截、切点表达式等技术,将代理与Spring Bean 容器整合,提供AOP 切面功能。
  • 第13 ~ 17章:扩展简单版Spring 框架的自动化功能,完成自动扫描注册、注解和代理注入,以及通过三级缓存处理对象的循环依赖等功能。
  • 第18 ~ 21章:基于简单实现的Spring 框架整合JDBC、事务的功能,开发一个简单版的ORM 框架,并将ORM 框架整合到Spring Bean 容器中,介绍自定义代理对象的扫描和注册过程。

本书主要通过渐进式开发功能模块,以实现开发整个Spring 框架的核心源码。首先,每章开头都会列出难度和重点;然后,正文中会介绍要处理的问题、具体设计和实现代码;最后,给出测试验证和本章总结。

4. 勘误记录

1. 第3页,Spring 框架地图

  • 错误:BeanPostProcessor 前置处理 | postProcessAfterInitializtion
  • 修改:BeanPostProcessor 后置处理 | postProcessAfterInitializtion

2. 第17页,图 2-2 类图错误

  • 错误:图 2-2 DefaultSingletonBeanRegistry #addSingleton 类图与代码不符
  • 修改:图 2-2 DefaultSingletonBeanRegistry #registerSingleton

3. 第5页,工程示意图调整

  • 错误:SpringTutorials
  • 修改:book-small-spring
  • 说明:因为作者github中项目较多,所以统一修改了工程名称,方便读者知道book开头的是项目工程是图书库代码。

4. 第27页,工程结构,颜色标记 感谢 反馈人:@苏沐

  • 错误:DefaultListableBeanFactory 绿色标记
  • 修改:DefaultListableBeanFactory 黑色标记
  • 说明:绿色为新增,DefaultListableBeanFactory 非新增类,为黑色。

5. 第52页,图 5-4 感谢 反馈人:@水中捞月、@INIT

  • 错误:BeanFactory 多了一个 registerBeanDefinition 方法
  • 修改:删除掉 registerBeanDefinition 方法,并在 BeanFactory 标记《接口》

6. 第167页,图 12-1 感谢 反馈人:@🍇葡萄

  • 错误:图中 ProxyFacory 单词错误
  • 修改:ProxyFacory 修改为 ProxyFactory

More Repositories

1

CodeGuide

📚 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、点赞、分享)!
Shell
10,953
star
2

itstack-demo-design

🎨 《重学Java设计模式》是一本互联网真实案例实践书籍。以落地解决方案为核心,从实际业务中抽离出,交易、营销、秒杀、中间件、源码等22个真实场景,来学习设计模式的运用。欢迎关注小傅哥,微信(fustack),公众号:bugstack虫洞栈,博客:https://bugstack.cn
Java
6,307
star
3

small-spring

🌱《 Spring 手撸专栏》,本专栏以 Spring 源码学习为目的,通过手写简化版 Spring 框架,了解 Spring 核心原理。在手写的过程中会简化 Spring 源码,摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。
Java
4,602
star
4

interview

Java 面经手册,全书共计 5 章 29 节,417页11.5万字,耗时 4 个月完成。涵盖数据结构、算法逻辑、并发编程、JVM以及简历和互联网大厂面试等内容。
Java
1,523
star
5

RoadMap

RoadMap —— Java后端开发技能路书
HTML
899
star
6

NaiveChat

🎭 本IM通信项目是作者小傅哥使用JavaFx、Netty4.x、SpringBoot、Mysql等技术栈和偏向于DDD领域驱动设计方式,搭建的仿桌面版微信实现通信核心功能。课程文章已发布到GitChat专栏,欢迎购买。如果本项目能为您提供帮助,请给予支持(关注、⭐Star、分享)!
JavaScript
845
star
7

itstack-demo-netty

微信公众号:bugstack虫洞栈 | 专注于原创开发专题案例。跟着案例学Netty,Netty4.x案例从简单入门到应用实战,全篇37章节优秀案例+实战源码[基础篇(13)、中级篇(13)、高级篇(3章+)、源码分析篇],以上章节全部完成并不断持续更新中。欢迎关注公众号:bugstack虫洞栈 | 阅读专题文章+调试案例源码学习{回复netty案例}。
CSS
703
star
8

chatbot-api

《ChatGPT AI 问答助手》 开源免费项目,涵盖爬虫接口、ChatGPT API对接、DDD架构设计、镜像打包、Docker容器部署,小巧精悍,流程全面。对于Java编程伙伴来说,非常具有学习价值。
Java
497
star
9

guide-idea-plugin

IDEA Plugin 插件开发可以帮助研发人员提升能效,解决一些实际场景中的共性问题。但最近在折腾IDEA插件开发的时候,市面的资料确实不多,也没有成体系完整的开发指导手册,所以就遇到了很多不知道就不会的事情,需要一点点查询搜索源码、验证API接口,最终把各项功能实现,当然在这个过程中也确实踩了不少坑!接下来在这个专栏会把一些关于 IDEA 插件开发用到的各项知识做成案例输出出来,帮助有需要的研发伙伴,一起建设 IDEA Plugin
Java
376
star
10

itstack-demo-bytecode

本专栏主要针对字节码编程系列知识栈进行编写文章学习。在字节码编程方便有三个比较常见的框架;ASM、Javassit、Byte-buddy,他们都可以使用自己的API方式进行字节码的插装,通过这样增强方法的方式就可以和Javaagent结合起来开发非入侵的全链路监控服务,以及做反射、中间件和混淆代码等
Java
364
star
11

itstack-demo-jvm

本专题主要介绍如何通过java代码来实现JVM的基础功能(搜索解析class文件、字节码命令、运行时数据区等),从而让java程序员通过最熟知的java程序,学习JVM是如何将java程序一步步跑起来的,按照《java虚拟机规范》与go语言版的《自己动手写Java虚拟机》实现java版虚拟机案例如下;
Java
331
star
12

java-algorithms

📝 Java 数据结构和算法 | Algorithms and data structures implemented in Java with explanations and links to further readings
Java
298
star
13

CodeDesignTutorials

🎨 《重学Java设计模式》是一本互联网真实案例实践书籍。以落地解决方案为核心,从实际业务中抽离出,交易、营销、秒杀、中间件、源码等22个真实场景,来学习设计模式的运用。欢迎关注小傅哥,微信(fustack),公众号:bugstack虫洞栈,博客:https://bugstack.cn
Java
253
star
14

vo2dto

💱 IDEA 插件,解决对象转换问题。选定对象批量织入“x.set(y.get)”代码,帮助开发者自动生成vo2dto转换代码。
Java
145
star
15

Lottery

🎁 Lottery 抽奖系统 - 基于领域驱动设计的四层架构实践 | Lottery 抽奖系统 项目是一款互联网面向C端人群营销活动类的抽奖系统,可以提供抽奖活动玩法策略的创建、参与、记账、发奖等逻辑功能。在使用的过程中运营人员通过创建概率类奖品的抽奖玩法,对用户进行拉新、促活、留存,通常这样的系统会用在电商、外卖、出行、公众号运营等各类场景中。By 小傅哥,《重学Java设计模式》图书作者,沉淀、分享、成长,让自己和他人都能有所收获!
Java
123
star
16

small-mybatis

在手写的过程中学习 Mybatis 从解析、绑定、反射、缓存,到回话和事务操作,以及如何与 Spring 进行关联注册 Bean 对象,完成整合部分功能逻辑。通过这些内容的拆解实现,读者伙伴就可以非常清楚的知道这些核心功能都是如何实现的了,以后再阅读 Mybatis 源码也就知道从哪开始到哪结束了。
Java
118
star
17

itstack-demo-agent

目前市面的全链路监控系统基本都是参考Google的Dapper来做的,本专题主要通过六个章节的代码实战,来介绍如何使用javaagent以及字节码应用,来实现一个简单的java代码链路流程监控。 章节列表 - 基于JavaAgent的全链路监控一《嗨!JavaAgent》 - 基于JavaAgent的全链路监控二《通过字节码增加监控执行耗时》 - 基于JavaAgent的全链路监控三《ByteBuddy操作监控方法字节码》 - 基于JavaAgent的全链路监控四《JVM内存与GC信息》 - 基于JavaAgent的全链路监控五《ThreadLocal链路追踪》 - 基于JavaAgent的全链路监控六《开发应用级监控》 关注微信公众号,bugstack虫洞栈,回复获取源码
Java
106
star
18

EasyRiggerInitializr

SpringBoot 脚手架,简化项目构建
Java
101
star
19

schedule-spring-boot-starter

增强SpringBoot Schedule,开发中间件以zookeeper为注册中心扩展为分布式任务调度系统,接入方式接单易用,目前实现功能如下; 多机器部署任务 统一控制中心启停 宕机灾备,自动启动执行 实时检测任务执行信息:部署数量、任务总量、成功次数、失败次数、执行耗时等
Java
91
star
20

book-small-mybatis

《手写Mybatis:渐进式源码实践》 —— 作者:付政委(小傅哥)
Java
86
star
21

itstack-demo-ddd

领取驱动设计DDD{Domain-Driven Design}历史较长但随着微服务的兴起DDD又活跃到开发工程师的视线。它提供的是一套架构设计思想,我们可以使用这套方法论将架构设计的尽可能做到高内聚、低耦合、可扩展性强的应用服务。那么本专题以DDD实战落地为根本,分章节设计不同的架构模型。 学习并实战是奔入应用级开发最快的方法,Hi HelloWorld!我来了。
CSS
77
star
22

chatglm-sdk-java

智谱AI大模型开放SDK - By 小傅哥版本
Java
71
star
23

itstack-demo-jdk8

一直想把jdk1.8的新特性整理下,恰好看到老外的git(文后有链接),在这个结构上继续完善了说明和功能,做了41个单元测试案例,方便新人学习。以下内容很干,对于一个萌新小白来说,学习jdk1.8的新特性,基本看一遍就知道个7788了,在熟读两遍最后跟着写一遍,那么在实际项目中就可以运用了。不过!新特性,虽然很好。但如果想用,那么自己一定要看看相对应的源码并多练习,否则真的容易给自己搞晕,又很难阅读。
Java
70
star
24

CodeDesign

CodeDesign
Java
68
star
25

fuzhengwei.github.io

本仓库以基于 docsify 构建的所见即所得博客,程序员👨🏻‍💻伙伴可以通过克隆仓库,配置基础的信息就可以拥有一个这样的博客了!
65
star
26

itstack-demo-rpc

RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。 本专题主要通过三个章节简单的实现rpc基础功能,来深入学习rpc是如何交互通信的; 手写类似dubbo的rpc框架第一章《自定义配置xml》 手写类似dubbo的rpc框架第二章《netty通信》 手写类似dubbo的rpc框架第三章《rpc框架》 在这些章节中我们会学习到以下知识点; 1、自定义xml的配置和解析 2、netty 3、JDKProxy 4、客户端通过注册中心,发布和获取链接者 5、服务的通过JDKProxy,进行调用方法
Java
61
star
27

itstack-demo-nettychat

使用netty5.0通信方式的局域网聊天,可以快速学习java桌面程序开发。仿照qq登陆首页,界面优雅迷人。本聊天程序叫;《语约》或者《与约》!我认为比马桶、啥的名字好太多了!
Java
57
star
28

api-gateway

《API网关:中间件设计和实践》—— 微服务设计,源码级体验!
44
star
29

fuzhengwei

41
star
30

MonitorDesign

MonitorDesign
Java
40
star
31

openai-sdk-java

星球开源共建项目 《OpenAI SDK》 统一大模型标准化对接的技术组件项目,此项目以解决实际市面上的场景为诉求,将 OpenAI、Claude、PalM、文心一言、通义千问、讯飞星火、智谱 ChatGLM、腾讯混元等这些大模型做一个统一的 SDK 对接组件。
37
star
32

itstack-demo-asm

itstack-demo-asm
Java
33
star
33

itstack-demo-iot-gatewary

itstack-demo-iot-gatewary
Java
27
star
34

itstack-demo-springcloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Java
27
star
35

itstack-ark-wx-test

微信公众号:bugstack虫洞栈 沉淀、分享、成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获。目前已完成的专题有;Netty4.x实战专题案例、用Java实现JVM、基于JavaAgent的全链路监控、手写RPC框架、架构设计专题案例[Ing]等。
Java
26
star
36

itstack-demo-code

itstack-demo-code
Java
21
star
37

itstack-demo-code-mybatis

MyBatis 是一款非常优秀的持久层框架,相对于IBatis更是精进了不少。与此同时它还提供了很多的扩展点,比如最常用的插件;语言驱动器,执行器,对象工厂,对象包装器工厂等等都可以扩展。那么,如果想成为一个有深度的男人(程序猿),还是应该好好的学习一下这款开源框架的源码,以此可以更好的领会设计模式的精髓(面试?)。其实可能平常的业务开发中,并不会去深究各个框架的源代码,也常常会听到即使不会也可以开发代码。但!每个人的目标不同,就像;代码写的好工资加的少(没有bug怎么看出你工作嘞!),好!为了改变世界,开始分析喽!
Java
20
star
38

blog.github.io

fuzhengwei.github.io
HTML
15
star
39

SQM

服务质量监控,javaagent+asm
Java
15
star
40

guide-vo2dto

Java
13
star
41

xfg-frame-ddd

小傅哥的《Java 简明教程》- 【系统架构】DDD架构 https://bugstack.cn/md/road-map/road-map.html
12
star
42

itstack-demo-frame

itstack-demo-frame
JavaScript
12
star
43

door-spring-boot-starter

door-spring-boot-starter
Java
11
star
44

Game

小霸王
JavaScript
10
star
45

itstack-middleware-control

itstack-middleware-control
JavaScript
10
star
46

itstack-demo-drools

itstack-demo-drools
JavaScript
10
star
47

chat.github.io

🎭 本专栏是作者小傅哥使用JavaFx、Netty4.x、SpringBoot、Mysql等技术栈和偏向于DDD领域驱动设计方式,搭建的仿桌面版微信实现通信核心功能。课程文章已发布到GitChat专栏,欢迎购买。如果本项目能为您提供帮助,请给予支持(关注、⭐Star、分享)!
JavaScript
10
star
48

guide-idea-plugin-probe

《IntelliJ IDEA 插件开发》第八节:在插件中引入探针,基于字节码插桩获取执行SQL
Java
9
star
49

itstack-demo-api

itstack-demo-api
Java
7
star
50

TensorFlow-Tutorial

📡 Simple and ready-to-use tutorials for TensorFlow
Python
7
star
51

guide-idea-plugin-scaffolding

Java
7
star
52

IM

IM
Java
6
star
53

itstack-demo-frame-ssm

itstack-demo-frame-ssm
JavaScript
6
star
54

docker-image-pusher

镜像仓库,拉取DockerHub镜像,推送到个人的私有仓库中使用
6
star
55

itstack-demo-netty-server

JavaScript
5
star
56

Cloudreve-PHP-XFG-1.1.2

PHP
4
star
57

guide-idea-plugin-create-project-by-gradle

Java
4
star
58

guide-idea-plugin-tab

Java
4
star
59

itstack-leetcode

leetcode 毛刷
Java
4
star
60

db-router-spring-boot-starter

db-router-spring-boot-starter
4
star
61

chatgpt-sdk-java

chatgpt-sdk-java
3
star
62

itstack-demo-netty-mq-server

JavaScript
3
star
63

guide-idea-plugin-tool-window

Java
3
star
64

itstack-demo-netty-mq-consumer

Java
3
star
65

itstack-demo-worker

在线数据库查询工具
3
star
66

itstack-demo-springboot-helloworld

itstack-demo-springboot-helloworld
Java
2
star
67

TestPoi

Java
2
star
68

itstact-interview

itstact-interview
2
star
69

TimeOutCenter

TimeOutCenter
Java
2
star
70

itstack-demo-dubbo

Java
2
star
71

itstack-demo

JavaScript
2
star
72

xfg-frame-archetype-std

Java
1
star
73

javaee_test_springaop

Java
1
star
74

AssistClient

Java
1
star
75

sqlcipher

C
1
star
76

javaee_drdgportal

JavaScript
1
star
77

BarCodePrinterAssistClient_Publish

1
star
78

dbstack

online db stack
Java
1
star
79

itstack-demo-config

itstack-demo-config
1
star
80

xfg-frame-archetype-lite

Java
1
star
81

guide-idea-plugin-create-project-by-platform

Java
1
star
82

itstack-demo-upload

itstack-demo-upload
JavaScript
1
star
83

VideoDataMonitorServer

JavaScript
1
star
84

javase_TestMybatis

Java
1
star
85

itstack-demo-amq

Java
1
star
86

php

JavaScript
1
star
87

xfg-dev-tech-blog

博客自动部署教程
HTML
1
star
88

guide-idea-plugin-orm

Java
1
star
89

guide-idea-plugin-vo2dto

Java
1
star
90

kodbox.1.08

kodbox.1.08
1
star
91

TestSpringTask

Java
1
star
92

proxy_ip

获取代理ip的python脚本
Python
1
star
93

BarCodePrinterAssistClient

Java
1
star