猜你喜欢
手写Spring:渐进式源码实践

手写Spring:渐进式源码实践

书籍作者:付政委 ISBN:9787121444203
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:2254
创建日期:2023-05-10 发布日期:2023-05-10
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
下载地址
内容简介

《手写Spring:渐进式源码实践》基于Spring框架的核心逻辑,通过实现简化版Spring框架的方式,对Spring进行分析、设计和实践。本书以实践为核心,摒弃Spring源码中繁杂的内容,选择框架中的核心逻辑,简化代码实现过程,保留核心功能,如IOC、AOP、Bean的生命周期、上下文、作用域、资源处理、JDBC、事务、开发简易版ORM框架、将ORM框架整合到Spring框架中等内容的方案设计和源码实现。在Spring框架功能模块的开发过程中,逐步介绍并深入分析其中所涉及的设计原则和设计模式,使读者游刃有余地解决在调试Spring源码及开发SpringBoot Starter组件时遇到的问题。


《手写Spring:渐进式源码实践》既可以作为计算机相关行业研发人员的辅导书,也可以作为高等院校计算机专业学生的参考书。无论是初学者,还是中、高级研发人员,都能从本书中获得启发。


作者简介

付政委(小傅哥)
作为一名一线互联网Java工程师、架构师,曾开发过交易、营销类项目,运营、活动类项目,设计过中间件,组织过系统重构,编写过技术专利。他不仅从事业务系统的开发工作,也经常做一些字节码插桩类的设计和实现,对架构的设计和落地具有丰富的经验。他既热衷于Java语言,也喜欢研究中继器、I/O板卡、C#和PHP,是一名活跃的技术“折腾者”。常逛GitHub,乐于分享技术文章。
沉淀、分享、成长,让自己和他人都能有所收获!


编辑推荐
适读人群 :本书既可以作为计算机相关行业研发人员的辅导书,也可以作为高等院校计算机专业学生的参考书。无论是初学者,还是中、高级研发人员,都能从本书中获得启发。

本书通过手写 Spring 的方式,由易到难,手把手带领读者从零开始写出自己的Spring框架。

本书删繁就简,筛选Spring 源码中的核心逻辑,简化代码实现过程,学习包括IOC、AOP、Bean 的生命周期、上下文、作用域、资源处理及整合ORM框架等核心技术。

本书提供所有章节的配套源码及解读,方便读者动手实践。


《手写Spring:渐进式源码实践》电子书免费下载

pdf下载 txt下载 epub下载 mobi下载 azw3下载

前言

前言

Spring是一个优秀的轻量级Java开发框架。2003年6月,Rod Johnson创建了Spring框架,第一次发布在Apache 2.0许可证下,后将其改名为Spring并且正式发布。

2002年10月,Rod Johnson在Expert One-on-One J2EE Design and Development一书中,对Java EE系统的框架臃肿、低效、脱离现实等问题提出了质疑,并提出了一个基于普通Java类和依赖注入的简单解决方案。然后,Rod Johnson创建了Interface 21框架。它是一个从实际需求出发,着重于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。Spring框架以Interface 21框架为基础,经过重新设计和内容的不断丰富,里程碑式的Spring 1.0版本于2004年3月正式发布。同年,Rod Johnson又推出了一部堪称经典的图书Expert one-on-one J2EE Development without EJB,该书在Java开发领域掀起了轩然大波,不断改变着Java开发者对程序设计和开发的思考方式。

对于希望长期从事编程开发的架构师和技术研发人员,不仅要熟练使用Spring框架,还要掌握其源码设计,通过学习这些优秀的设计思想和设计模式在实际场景中的应用方法,提高自己的业务工程架构设计能力,以及对基于Spring框架所实现的一些技术类组件的驾驭与把控能力。


为什么撰写本书

大部分使用Spring框架的研发人员在遇到Spring框架的报错提醒,以及需要基于Spring框架开发SpringBoot Starter等技术类组件时,会尝试阅读Spring框架的源码。由于Spring框架的源码体量庞大、语法复杂,也不像平常的业务流程开发代码一样具有分层结构,并且其中使用了大量的设计模式,所以阅读难度较大。研发人员很难厘清其中的调用链路和各个类之间的关系。

笔者阅读了不少关于Spring 的图书,在反复学习源码后,仍然难以理解Spring 框架中各个功能的实现细节。其中一个原因是自己没有动手实践,只阅读了图书,很难完全掌握Spring 框架的精髓。因此,笔者结合《Spring 源码深度解析》《精通Spring 4.x——企业应用开发实战》等图书,以及GitHub 中的优秀案例——code4craft/tiny-spring、DerekYRC/mini-spring 等,逐步完成了Spring 框架中核心源码的实现,并扩展了ORM框架。

在编写的过程中,还收到了GitHub 用户zh-d-d、cwjokaka、numgin 提交的PR,在此表示感谢。在学习过程中,笔者对Spring 框架有了非常深入的了解和认识,也体会了更多精妙的设计原则和设计模式。所以,我把关于手动实现简单版Spring 框架的内容编写成书,希望可以帮助更多的研发人员学习Spring 源码,编写出有价值的设计方案。


本书主要内容

本书采用从零手写Spring 的方式,摒弃Spring 源码中繁杂的内容,选择整体框架中的核心逻辑,简化代码实现过程,保留核心功能,如IOC、AOP、Bean 的生命周期、上下文、作用域和资源处理等。在开发过程中,细化功能模块,逐步完成一个简单版的Spring 框架。

本书共21 章。引言介绍了学习Spring 的方法,以及本书源码的获取和使用方式。

?? 第1 ~ 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 框架的核心源码开发。首先,每章开头都会列出难度和重点;然后,正文中会介绍要处理的问题、具体设计和实现代码;最后,给出测试验证和本章总结。

在阅读本书的过程中,建议读者先阅读“引言”,以便从全局的视角了解本书要实现的Spring 框架的内容,掌握学习方法。同时,“引言”中也列举了本书工程源码的环境配置、获取和使用方法。


致谢

要特别感谢我的父母(付井海、徐文杰)、妻子(郭维清),由于他们在日常生活中分担了许多家庭任务,才让我有更多的时间投入文字创作中,使得这本书能与广大读者见面。

感谢灵魂设计师Beebee老师为本书设计封面插图。

博文视点的宋亚东编辑的热情推动最终促成了我与电子工业出版社的合作。感谢电子工业出版社博文视点对本书的重视,以及为本书出版所做的一切。

由于笔者水平有限,书中难免存在一些疏漏和不足,希望广大同行专家和读者给予批评与指正。


付政委(小傅哥)


目录

目录

引言 /1

第1章 实现一个简单的Spring Bean容器 / 7

1.1 容器是什么 / 7

1.2 简单容器设计 / 8

1.3 简单容器实现 / 9

1.4 容器使用测试 / 12

1.5 本章总结 / 13

第2章 实现Bean对象的定义、注册和获取 / 14

2.1 容器的思考 / 14

2.2 完善容器设计 / 15

2.3 完善容器实现 / 16

2.4 Bean 生命周期测试 / 22

2.5 本章总结 / 24

第3章 基于Cglib实现含构造函数的类实例化策略 / 25

3.1 实例化问题 / 25

3.2 实例化策略设计 / 26

3.3 实例化策略代码实现 / 27

3.4 构造函数对象测试 / 32

3.5 本章总结 / 35

第4章 注入属性和依赖对象 / 36

4.1 Bean对象拆解思考 / 36

4.2 属性填充设计 / 37

4.3 属性填充实现 / 38

4.4 注入属性测试 / 43

4.5 本章总结 / 46

第5章 资源加载器解析文件注册对象 / 47

5.1 对象创建问题 / 47

5.2 资源加载和解析设计 / 48

5.3 资源加载和解析设计实现 / 49

5.4 配置Bean对象注册测试 / 60

5.5 本章总结 / 64

第6 章 实现应用上下文 / 65

6.1 分治Bean 对象功能 / 65

6.2 Bean 对象扩展和上下文设计 / 66

6.3 Bean 对象扩展和上下文实现 / 68

6.4 应用上下文功能测试 / 79

6.5 本章总结 / 83

第7 章 Bean 对象的初始化和销毁/ 84

7.1 容器管理Bean 功能 / 84

7.2 初始化和销毁设计 / 85

7.3 初始化和销毁实现 / 87

7.4 容器功能测试 / 97

7.5 本章总结 / 99

第8 章 感知容器对象 / 101

8.1 Spring Bean 容器的功能 / 101

8.2 感知容器设计 / 102

8.3 感知容器实现 / 103

8.4 Aware 接口的功能测试 / 111

8.5 本章总结 / 114

第9 章 对象作用域和FactoryBean/ 117

9.1 Bean 对象的来源和模式 / 117

9.2 FactoryBean 和对象模式设计 / 118

9.3 FactoryBean 和对象模式实现 / 119

9.4 代理Bean 和对象模式测试 / 128

9.5 本章总结 / 132

第10 章 容器事件和事件监听器 / 134

10.1 运用事件机制降低耦合度 / 134

10.2 事件观察者设计 / 135

10.3 事件观察者实现 / 136

10.4 事件使用测试 / 146

10.5 本章总结 / 148

第11 章 基于JDK、Cglib 实现AOP 切面 / 150

11.1 动态代理 / 150

11.2 AOP 切面设计 / 151

11.3 AOP 切面实现 / 152

11.4 AOP 切面测试 / 163

11.5 本章总结 / 165

第12 章 把AOP 融入Bean 的生命周期 / 166

12.1 AOP 与框架整合思考 / 166

12.2 AOP 切面设计 / 167

12.3 AOP 切面实现 / 168

12.4 切面使用测试 / 176

12.5 本章总结 / 179

第13 章 自动扫描注册Bean对象 / 180

13.1 注入对象完善点 / 180

13.2 自动扫描注册设计 / 181

13.3 自动扫描注册实现 / 182

13.4 注册Bean 对象测试 / 190

13.5 本章总结 / 193

第14 章 通过注解注入属性信息 / 194

14.1 引入注入注解 / 194

14.2 注入属性信息设计 / 195

14.3 注入属性信息实现 / 196

14.4 注解使用测试 / 206

14.5 本章总结 / 208

第15 章 给代理对象设置属性注入 / 210

15.1 代理对象创建过程问题 / 210

15.2 代理对象属性填充设计 / 211

15.3 代理对象属性填充实现 / 212

15.4 代理对象属性注入测试 / 219

15.5 本章总结 / 221

第16 章 通过三级缓存解决循环依赖 / 222

16.1 复杂对象的创建思考 / 222

16.2 循环依赖设计 / 223

16.3 循环依赖实现 / 227

16.4 循环依赖测试 / 234

16.5 本章总结 / 238

第17 章 数据类型转换 / 239

17.1 类型转换设计 / 239

17.2 类型转换实现 / 240

17.3 类型转换测试 / 249

17.4 本章总结 / 251

第18 章 JDBC 功能整合 / 252

18.1 JdbcTemplate 说明 / 252

18.2 整合JDBC 服务设计 / 253

18.2 整合 JDBC 服务开发 / 254

18.3 JDBC 功能测试 / 258

18.4 本章总结 / 260

第19 章 事务处理 / 261

19.1 了解事务 / 261

19.2 事务功能设计 / 262

19.3 事务功能实现 / 264

19.4 切面事务测试 / 272

19.5 本章总结 / 276

第20 章 ORM 框架实现 / 278

20.1 简单ORM 框架设计 / 278

20.2 简单ORM 框架实现 / 279

20.3 ORM 框架使用测试 / 287

20.4 本章总结 / 290

第21 章 将ORM 框架整合到Spring Bean容器中 / 291

21.1 ORM-Spring 整合设计 / 291

21.2 ORM-Spring 整合实现 / 292

21.3 整合功能验证 / 299

21.4 本章总结 / 302


产品特色