Bean 生命周期 后置处理器
生命周期七步法速记
AbstractApplicationContext.refresh()① obtainFreshBeanFactory // 加载 BeanDefinition② prepareBeanFactory // 注册 SpEL、ResourceEditor③ postProcessBeanFactory // 子类扩展④ invokeBeanFactoryPostProcessors // 配置类解析、@ComponentScan⑤ registerBeanPostProcessors // 把 *BeanPostProcessor 注册到容器⑥ initMessageSource & initApplicationEventMulticaster // 国际化、事件⑦ finishBeanFactoryInitialization // 实例化单例 Bean(今天重点)
IDEA 打条件断点
类:DefaultSingletonBeanRegistry
方法:addSingletonFactory
条件:beanName.equals("bookService")
启动 Tomcat,当控制台出现:
Adding singleton factory for bean 'bookService'
截图保存,即 三级缓存 现场。
观察调用栈
AbstractBeanFactory#doGetBean→ DefaultSingletonBeanRegistry#getSingleton→ addSingletonFactory(beanName, () -> getEarlyBeanReference(...))