🚀 一个手写的 Spring IoC + AOP 容器,支持三级缓存、构造方法推断、自动代理选择等核心功能,帮助深入理解 Spring 的设计原理。
本项目是对 Spring Framework 核心机制 的简化复刻,包含:
- IoC 容器:Bean 注册、作用域管理、依赖注入、循环依赖解决。
- AOP 模块:支持 JDK 动态代理 & CGLIB 动态代理,切点表达式匹配,方法拦截链。
- Bean 生命周期:构造方法推断、初始化、销毁回调、后置处理器。
- 可扩展机制:
BeanPostProcessor、BeanFactoryPostProcessor,便于扩展和插件化。
目标是用最小可行代码,学习并复现 Spring 核心思想。
- ✅ 三级缓存:解决字段注入导致的循环依赖。
- ✅ 构造方法推断:自动选择合适的构造器(模仿 Spring 的
ConstructorResolver)。 - ✅ 作用域支持:单例(singleton)、多例(prototype)。
- ✅ 依赖注入:
@Autowired自动注入字段。 - ✅ 生命周期注解:
@PostConstruct、@PreDestroy。 - ✅ Aware 回调:
BeanNameAware、BeanFactoryAware。
- ✅ 自动代理选择:
- JDK 动态代理(如果 Bean 实现了接口)
- CGLIB 动态代理(如果 Bean 没有接口)
- ✅ 切点匹配:
@Before、@After、@Around。 - ✅ 增强链执行:支持多切面、多增强方法的链式执行。
- ✅ 懒加载代理:仅在需要时创建代理对象,避免性能损耗。
- ✅ 构造方法推断:自动选择合适构造方法并填充依赖。
- ✅ 初始化回调:
InitializingBean.afterPropertiesSet()。 - ✅ 销毁回调:
DisposableBean.destroy()与自定义destroy-method。 - ✅ BeanPostProcessor:支持在初始化前后修改 Bean。
flowchart TD
subgraph Context
A[ApplicationContext LaiYaoApplicationContext]
end
subgraph IoC
B[DefaultBeanFactory]
C[三级缓存 Singleton/Factory/Early]
D[BeanDefinitionRegistry]
end
subgraph AOP
E[ProxyFactory JDK/CGLIB 自动选择]
F[AopHandler 增强链]
G[PointCutMatcher 切点匹配]
end
A --> B
B --> C
B --> D
B --> E
E --> F
F --> G