Spring 提供了哪些接口让用户自定义?详解 Spring 扩展点
📌 Spring 提供了哪些接口让用户自定义?详解 Spring 扩展点
🚀 一、问题背景
很多人认为 Spring 就是 IOC+AOP,其实 Spring 更重要的是其高度可扩展的设计。 例如:
- 动态注册 Bean
- 修改 BeanDefinition
- 对象初始化前后增强
- 实现自动装配
- 实现 SpringBoot Starter
- 监听容器启动事件
- 自定义事务、缓存、RPC
🎯 二、核心原理
Spring 启动过程实际上就是不断调用各种扩展接口,每一个阶段都开放了 Hook 点供开发者进行扩展。
📊 三、数据结构分析
| 接口 | 作用 |
|---|---|
| BeanFactoryPostProcessor | 修改 BeanDefinition |
| BeanDefinitionRegistryPostProcessor | 动态注册 Bean |
| BeanPostProcessor | 初始化前后增强 Bean |
| InstantiationAwareBeanPostProcessor | 实例化前后拦截 |
| SmartInstantiationAwareBeanPostProcessor | 预测类型、三级缓存代理 |
| InitializingBean | 初始化完成回调 |
| DisposableBean | 销毁回调 |
| ApplicationListener | 监听 Spring 事件 |
| ImportSelector | 动态导入配置类 |
| ImportBeanDefinitionRegistrar | 注册 BeanDefinition |
| FactoryBean | 自定义 Bean 创建逻辑 |
| ApplicationContextInitializer | SpringBoot 启动前初始化 |
🔥 四、算法分析(生命周期)
⚙ 五、实际案例
① BeanPostProcessor 实现代理增强
② ImportSelector 实现自动装配
③ ApplicationListener 监听事件
✅ 六、优缺点分析
| 优点 | 缺点 |
|---|---|
|
高度解耦 支持插件化 方便扩展 无需修改源码 |
生命周期复杂 接口数量较多 学习成本较高 |
🎯 七、面试常见问题
- BeanFactoryPostProcessor 和 BeanPostProcessor 区别?
- SpringBoot Starter 如何自动装配?
- FactoryBean 与 BeanFactory 有什么区别?
- ImportSelector 与 ImportBeanDefinitionRegistrar 区别?
- 三级缓存为什么依赖 SmartInstantiationAwareBeanPostProcessor?
- Spring AOP 为什么依赖 BeanPostProcessor?
- ApplicationContextAware 的作用是什么?
- Spring 生命周期有哪些扩展点?
📌 八、总结
相关文章
-
MySQL为什么使用B+树作为索引结构?
MySQL为什么使用B+树作为索引结构?
NEW个对象 2026-06-15
-
Git信息提交规范
Git提交信息格式:每次提交都应该有一个简明扼要的提交信息,格式为类型(范围):描述。常见的类型包括feat(新功能)、fix(修复Bug)、docs(文档修改)、style(代码格式修改)、test(测试相关修改)、refactor(重构代码)、chore(构建或工具相关的修改)等。
NEW个对象 2024-10-03
-
dubbo支持多种协议:
dubbo支持多种协议:
NEW个对象 2025-02-26