第 一部分 Spring Framework 的 IOC 容器高级机制与原理
第 1 章 元编程与元信息 ........................... 3
1.1 理解元编程 ........................................ 3
1.1.1 理解“元” .................................. 3
1.1.2 编程与元编程 .............................. 3
1.2 配置源与配置元信息 ........................ 4
1.2.1 配置源 .......................................... 4
1.2.2 元信息 .......................................... 6
1.2.3 配置元信息 .................................. 6
1.3 Bean 与BeanDefinition ..................... 9
1.3.1 BeanDefinition 概述 ..................... 9
1.3.2 BeanDefinition 的结构 ............... 10
1.3.3 BeanDefinition 的简单使用 ....... 14
1.3.4 BeanDefinition 的合并 ............... 18
1.3.5 设计BeanDefinition 的意义 ...... 21
1.4 BeanDefinitionRegistry .................... 21
1.4.1 BeanDefinitionRegistry 概述 ..... 21
1.4.2 注册与移除 ................................ 23
1.5 小结 .................................................. 25
第 2 章 IOC 容器的高级机制 .................. 26
2.1 Environment ..................................... 26
2.1.1 Environment 概述 ...................... 26
2.1.2 Environment 的结构 .................. 28
2.1.3 Environment 的基本使用 .......... 30
2.1.4 Environment 深入探讨 .............. 32
2.2 BeanPostProcessor ........................... 34
2.2.1 理解后置处理器 ........................ 34
2.2.2 BeanPostProcessor 的使用 ......... 36
2.2.3 BeanPostProcessor 的扩展 ......... 42
2.3 BeanFactoryPostProcessor ............... 53
2.3.1 BeanFactoryPostProcessor
概述 ............................................. 53
2.3.2 BeanFactoryPostProcessor
的使用 ......................................... 53
2.3.3 BeanDefinitionRegistryPost
Processor .................................... 55
2.3.4 BeanDefinitionRegistryPost
Processor 的使用 ......................... 56
2.3.5 后置处理器的对比 .................... 59
2.4 编程式驱动IOC .............................. 59
2.4.1 简单的编程式驱动 .................... 59
2.4.2 编程式注入和初始化 ................ 62
2.4.3 内置组件的编程式使用 ............ 65
2.4.4 编程式资源管理 ........................ 67
2.5 自动装配与 SPI................................ 69
2.5.1 SPI 机制的由来 .......................... 69
2.5.2 JDK 中的SPI ............................. 70
2.5.3 Spring Framework 中的SPI ....... 71
2.5.4 SPI 在自动装配中的作用 .......... 72
2.6 小结 .................................................. 75
第 3 章 Bean 的全生命周期原理 ............ 76
3.1 Bean 的全生命周期概览 ................. 76
3.1.1 BeanDefinition 的来源 ............... 77
3.1.2 BeanDefinition 的后置处理 ....... 78
3.1.3 Bean 的实例化阶段 ................... 79
3.1.4 Bean 的销毁阶段 ....................... 80
3.1.5 Debug 测试代码编写 ................. 80
3.2 BeanDefinition 阶段 ......................... 84
3.2.1 加载XML 配置文件 .................. 84
3.2.2 加载注解配置类 ........................ 94
3.2.3 BeanDefinition 的后置处理 ..... 112
3.2.4 BeanDefinition 阶段总结 ......... 112
3.3 Bean 的实例化 ............................... 113
3.3.1 注册BeanPostProcessor ........... 114
3.3.2 finishBeanFactory
Initialization .............................. 119
3.3.3 实例化阶段总结 ...................... 131
3.4 Bean 的初始化 ............................... 132
3.4.1 doCreateBean ............................ 132
3.4.2 SmartInitializingSingleton ........ 148
3.4.3 Lifecycle 的回调 ...................... 149
3.4.4 初始化阶段总结 ...................... 152
3.5 Bean 的销毁 ................................... 152
3.5.1 ApplicationContext#stop .......... 153
3.5.2 ApplicationContext#close ......... 153
3.5.3 销毁阶段总结 .......................... 160
3.6 小结 ................................................. 160
第二部分 AOP 高级特性与原生设计
第 4 章 AOP 的高级特性 ...................... 163
4.1 TargetSource ................................... 163
4.1.1 TargetSource 的设计 ................ 163
4.1.2 TargetSource 的结构 ................ 164
4.1.3 内置TargetSource .................... 164
4.1.4 TargetSource 的使用 ................ 165
4.2 补足切入点表达式 ......................... 168
4.2.1 args( )与@args( ) ...................... 168
4.2.2 within( )与@within( ) ............... 169
4.2.3 target( )与@target( ) ................. 171
4.2.4 bean( ) ....................................... 171
4.3 切面实例化模型 ............................. 172
4.3.1 设计理念 .................................. 172
4.3.2 切面实例化模型的使用 .......... 173
4.4 引介机制 ........................................ 176
4.4.1 引介的作用和目标 .................. 177
4.4.2 AspectJ 的引介使用................. 177
4.5 LoadTimeWeaving .......................... 180
4.6 小结 ................................................ 181
第 5 章 5.1 Spring 原生 AOP 补充 ............. 182
Spring 内置的AOP 设计 ............... 182
5.1.1 连接点(Joinpoint) ............... 182
5.1.2 切入点(Pointcut) ................. 185
5.1.3 通知(Advice) ....................... 187
5.1.4 增强器(Advisor) ................. 188
5.1.5 核心API 的整体架构 .............. 190
5.2 原生AOP 的拦截器 ....................... 190
5.2.1 MethodInterceptor 的简单
使用 .......................................... 190
5.2.2 代理对象的内部结构 .............. 192
5.2.3 AdvisorAdapter......................... 193
5.3 AOP 织入的核心组件 .................... 195
5.3.1 AopProxy .................................. 195
5.3.2 AdvisedSupport ........................ 196
5.3.3 AopProxyFactory ...................... 197
5.3.4 AdvisedSupport 的子类 ........... 198
5.3.5 AnnotationAwareAspectJAuto
5.3.6 5.5.1 5.5.2 5.5.3 5.5.4 ProxyCreator ............................. 203
AOP 织入结构与流程 ............. 204
5.4 对比 SpringAOP 与 AspectJ ........... 205
5.5 原生AOP 机制的具体应用 ........... 205
需求描述 .................................. 205
代码准备 .................................. 206
AspectJ 切面类的不足 ............. 207
使用MethodInterceptor ........... 208
5.6 小结 ................................................. 210
第三部分 前沿技术与新版本特性
第 6 章 Spring 拥抱 AI ......................... 213
6.1 AI 与大语言模型 ....................... 213
6.1.1 发展历程 .................................. 213
6.1.2 运行机制 .................................. 214
6.1.3 典型应用 .................................. 215
6.1.4 主流模型 .................................. 216
6.2 Spring AI 项目 ................................ 216
6.2.1 起源与发展 .............................. 217
6.2.2 核心功能 .................................. 217
6.2.3 与传统AI 集成的对比 ............ 217
6.3 Spring Boot 整合Spring AI ............ 218
6.3.1 项目搭建与整合 ...................... 218
6.3.2 接入ChatGPT .......................... 219
6.3.3 接入DeepSeek ......................... 221
6.3.4 接入Ollama ............................. 223
6.3.5 参数调整 .................................. 226
6.4 标准化LLM 使用 .......................... 228
6.4.1 ChatClient ................................. 228
6.4.2 多轮对话 .................................. 230
6.4.3 结构化输出 .............................. 232
6.5 多模态 ............................................ 233
6.5.1 文生图 ...................................... 233
6.5.2 文本转语音 .............................. 235
6.5.3 语音转文本 .............................. 236
6.5.4 多模态融合 .............................. 237
6.6 RAG 构建知识库 ........................... 238
6.6.1 RAG 的核心流程 ..................... 238
6.6.2 手动构建知识库 ...................... 239
6.6.3 Spring AI 应用RAG ................ 241
6.7 工具调用 ........................................ 244
6.7.1 直接应用LLM 的问题 ............ 245
6.7.2 工具调用快速体验 .................. 245
6.7.3 工具的制作 .............................. 247
6.7.4 工具调用机制探究 .................. 250
6.8 MCP ............................................... 256
6.8.1 MCP 简介 ................................. 257
6.8.2 MCP 服务器制作 ..................... 257
6.8.3 MCP 客户端集成 ..................... 258
6.9 小结 ................................................ 260
第 7 章 Spring Framework 6 新特性 .... 261
7.1 AOT 编译 ....................................... 261
7.1.1 编译与解释 .............................. 261
7.1.2 JIT 编译与AOT 编译 .............. 263
7.1.3 JVM 的编译机制 ..................... 264
7.2 GraalVM ......................................... 266
7.2.1 GraalVM 概述 .......................... 266
7.2.2 安装GraalVM .......................... 266
7.2.3 使用GraalVM .......................... 269
7.3 可观察性 ........................................ 271
7.3.1 搭建可观察工程 ...................... 271
7.3.2 使用内置过滤器 ...................... 274
7.4 HTTP interface ............................... 276
7.5 小结 ................................................ 276
第 8 章 Spring Boot 3 新特性 .............. 278
8.1 版本与依赖要求 ............................ 278
8.2 自动装配规则 ................................ 278
8.3 配置属性兼容 ................................ 280
8.4 原生镜像 ........................................ 281
8.4.1 快速体验 .................................. 281
8.4.2 反射问题 .................................. 284
8.4.3 提示文件 .................................. 287
8.5 链路追踪 ........................................ 289
8.5.1 服务端工程整合Zipkin ........... 289
8.5.2 搭建可观察客户端工程 .......... 291
8.5.3 观察效果 .................................. 293
8.6 小结 ................................................ 294