循环依赖流程图
2021-07-09 18:06:45 3 举报
spring循环依赖以及beanpostprocess处理流程
作者其他创作
大纲/内容
org.springframework.beans.factory.annotation.InjectionMetadata#inject进行注入
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization
poplateBean()内部,会去进行属性注入,调取org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor#postProcessProperties进行属性注入
InstantiationAwareBeanPostProcessors,在doCreateBean之前有一次更改bean机会
B对象加入到一级缓存,从二级缓存和三级缓存中移除
否
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String)获取对象
是
现在让bean有机会做出反应,它的所有属性都设置好了,并且有机会知道它拥有的bean工厂(这个对象)。这意味着检查bean是否实现了InitializingBean或定义了一个定制的init方法,如果实现了,则调用必要的回调。
A和B对象互相依赖
并暴露出来该对象
完成其他定制的一些依赖注入和依赖检查等,如AutowiredAnnotationBeanPostProcessor执行@Autowired注解注入,
获取B对象
org.springframework.beans.factory.config.DependencyDescriptor#resolveCandidate解析候选bean
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingletonFactory,加入到三级缓存
实例化、依赖注入完毕,在调用显示的初始化之前完成一些定制的初始化任务,如@vaild的校验 ,@PostConstruct注解的初始化方法调用
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeInitMethods
A
进入populateBean方法对方法进行填充
获取A对象
将空构造函数A对象从三级缓存移除加入到二级缓存中
B
spring解决循环依赖的过程
org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveDependency解析依赖
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance获取到包装的对象
暴露对象
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.AutowiredFieldElement#inject使用空构造函数的A对象给B赋值
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation
获取到候选的B对象
A对象加入到一级缓存,从二级缓存和三级缓存中移除
刚进入poplateBean()方法,会调用org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
bean实例化完成,初始化逻辑,和装配逻辑前执行,返回false,循环里面的构建完成,;在此处可以执行一些初始化逻辑或依赖装配逻辑
实例化、依赖注入、初始化完毕时执行,如AspectJAwareAdvisorAutoProxyCreator(完成xml风格的AOP配置(<aop:config>)的目标对象包装到AOP代理对象)
是否有该对象
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor#postProcessProperties
0 条评论
下一页