一、Bean 生命周期
实例化(构造) → 属性填充 → Aware 回调(BeanName/BeanFactory…) → BeanPostProcessor 前置 → @PostConstruct/init-method → BeanPostProcessor 后置 → 使用中 → @PreDestroy/destroy-method 销毁。
二、三级缓存解决循环依赖
一级 singletonObjects 成品 Bean
二级 earlySingletonObjects 早期暴露(已实例化未填充)
三级 singletonFactories 早期工厂(生成代理)
单例 setter/字段注入场景下,A 创建时把工厂放三级缓存,填充时发现依赖 B,B 又依赖 A,从三级拿到 A 的早期引用,从而闭环。构造器注入无法解决(没机会放缓存),@Lazy 可打破。
三、作用域
singleton(默认,容器一个)/prototype(每次新实例,不缓存、不管理销毁)/request/session(Web)。prototype 的循环依赖不解决。