本书基于Spring框架的核心逻辑,通过实现简化版Spring框架的方式,对Spring进行分析、设计和实践。本书以实践为核心,摒弃Spring源码中繁杂的内容,选择框架中的核心逻辑,简化代码实现过程,保留核心功能,如IOC、AOP、Bean的生命周期、上下文、作用域、资源处理、JDBC、事务、开发简易版ORM框架、将ORM框架整合到Spring框架中等内容的方案设计和源码实现。在Spring框架功能模块的开发过程中,逐步介绍并深入分析其中所涉及的设计原则和设计模式,使读者游刃有余地解决在调试Spring源码及开发SpringBoot Starter组件时遇到的问题。本书既可以作为计算机相关行业研发人员的辅导书,也可以作为高等院校计算机专业学生的参考书。无论是初学者,还是中、高级研发人员,都能从本书中获得启发。
付政委(小傅哥)作为一名一线互联网Java工程师、架构师,曾开发过交易、营销类项目,运营、活动类项目,设计过中间件,组织过系统重构,编写过技术专利。他不仅从事业务系统的开发工作,也经常做一些字节码插桩类的设计和实现,对架构的设计和落地具有丰富的经验。他既热衷于Java语言,也喜欢研究中继器、I/O板卡、C#和PHP,是一名活跃的技术“折腾者”。常逛GitHub,乐于分享技术文章。沉淀、分享、成长,让自己和他人都能有所收获!
目录
引言 /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