bean生命周期与循环依赖
2022-01-26 16:16:53 0 举报
Spring容器中的bean生命周期包括实例化、属性设置、初始化前后方法调用和销毁等阶段。其中,循环依赖是指两个或多个bean相互依赖,形成一个闭环,导致无法完成初始化。解决循环依赖的方法有提前暴露单例bean、使用三级缓存、构造器注入和setter注入等方式。在Spring中,bean的生命周期由ApplicationContext负责管理,通过BeanFactoryPostProcessor和BeanPostProcessor等机制实现对bean的扩展操作。同时,Spring还提供了多种方式来管理bean的生命周期,如基于XML的配置方式、基于注解的配置方式和Java配置类的方式等。
作者其他创作
大纲/内容
7
3
invokeInitMethods
invokeCustomInitMethod
initializeBean
CommonAnnotationBeanPostProcessor
applyBeanPostProcessorsBeforeInitialization
6
MessageSourceAware
Bean生命周期
doGetBean
ApplicationContextAware
addSingleton
singletonObjects
InitializingBean::afterPropertiesSet
PostProcessorRegistrationDelegate#BeanPostProcessorChecker
applyBeanPostProcessorsAfterInitialization
getSingleton
userB:10
ApplicationContextAwareProcessor
处理Bean注解指定的destroyMethod
第一次获取userA不存在
ApplicationListenerDetector
第一次获取userB不存在
doCreateBean
userB:6
registerDisposableBeanIfNecessary
为Bean中的依赖赋值
getBean
userA:8
1
ApplicationEventPublisherAware
ApplicationStartupAware
2
生成UserA实例
Bean循环依赖
11
时间轴
这一步完成实例化
invokeAwareMethods
DisposableBean::destroy
二级
处理PostConstruct注解
4
Bean初始化流程
8第二次获取userA
一级缓存singletonObjects中是否存在
userA:12
earlySingletonObjects
12
instantiate
10
Bean销毁
为注入的userB赋值
EmbeddedValueResolverAware
三级
5
绿色表示进容器灰色表示出容器实例后的数字表示上图的执行序号
invokeCustomDestroyMethod
DisposableBeanAdapter::destroy
第一次从缓存获取
BeanFactoryAware
for (BeanPostProcessor processor : beanPostProcessors){processor.postProcessBeforeInitialization}
createBeanInstance
实例进出容器顺序
DefaultListableBeanFactory::resolveDependency
9
EnvironmentAware
AbstractApplicationContext line::918beanFactory.preInstantiateSingletons()
生成UserB实例
for (BeanPostProcessor processor : beanPostProcessors){processor.postProcessAfterInitialization}
userA:2
AutowiredAnnotationBeanPostProcessor::postProcessProperties
BeanClassLoaderAware
injectresolveFieldValue
BeanNameAware
populateBean
ResourceLoaderAware
一级
createBean
为注入的userA赋值
singletonFactories
AutowiredAnnotationBeanPostProcessor
ConfigurationClassPostProcessor#ImportAwareBeanPostProcessor
缓存变化过程
处理PreDestroy注解
收藏
0 条评论
回复 删除
下一页