INDEX · Spring

Spring 核心机制源码索引

阅读方法:每篇聚焦一条机制,把关键几个类的源码串起来(代码块 + 精炼注释)。Spring 源码是跨类的机制链,不像单个 JDK 类自洽。建议按下面顺序读:先 IOC 主干,再循环依赖,然后 AOP,最后事务(事务本质就是 AOP 的应用)。

核心机制

机制关键类一句话
IOC-refreshAbstractApplicationContext容器启动主干 refresh() 十二步,从加载 BeanDefinition 到实例化单例
Bean创建-doCreateBeanAbstractAutowireCapableBeanFactorygetBean 到 doCreateBean 主线:实例化、属性注入、初始化四步
循环依赖-三级缓存DefaultSingletonBeanRegistry三级缓存(成品 / 半成品 / 工厂)解决 setter 注入的循环依赖
AOP-动态代理AbstractAutoProxyCreator后置处理器织入代理,JDK 动态代理 vs CGLIB
事务-TransactionalTransactionInterceptor@Transactional 本质是 AOP 环绕通知,传播行为与失效场景
SpringBoot-启动与自动配置SpringApplicationrun() 主线与 AutoConfigurationImportSelector 的候选加载 + 条件过滤
SpringMVC-DispatcherServletDispatcherServletdoDispatch 主线:HTTP 请求如何变成 @RequestMapping 方法调用

机制之间的关系

  • IOC 是地基:所有 bean 由 refresh() 创建,AOP 和事务都是在 bean 创建过程中「插一脚」。
  • AOP 靠后置处理器:AbstractAutoProxyCreatorBeanPostProcessor,在 bean 初始化后判断要不要包成代理。
  • 事务是 AOP 的应用:@Transactional 没有独立机制,就是一个特殊的环绕通知 TransactionInterceptor,所以 AOP 的失效场景(自调用)事务全都有。
  • 循环依赖三级缓存与 AOP 咬合:第三级 singletonFactories 存的工厂,正是为了在需要时提前生成 AOP 代理,保证注入进去的是代理对象而非原始对象。