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 MVCC了解吗?
MVCC就是多版本并发控制,主要解决数据里读写并发问题。 在数据库读读操作是没问题的,写写操作通过加锁的方式解决,读写操作通过mvcc来解决的。
NEW个对象 2024-10-24
-
Atomic 原子类如何保证原子性?
Atomic 原子类如何保证原子性?
NEW个对象 2026-06-13
-
从数据结构到算法:RBAC权限系统的完整实现解析
RBAC(Role-Based Access Control,基于角色的访问控制)是企业级权限系统的主流设计模型。 它通过“用户—角色—权限”的映射关系,将复杂的权限管理问题抽象为结构化的数据模型与可计算的访问控制算法。
NEW个对象 2026-06-08