1 Star 0 Fork 0

SebastianPan / LP1-2-IOC_Transaction

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
调用栈.txt 8.48 KB
一键复制 编辑 原始数据 按行查看 历史
SebastianPan 提交于 2021-02-25 10:29 . no commit message
org.springframework.context.support.AbstractApplicationContext#refresh
org.springframework.context.support.AbstractApplicationContext#finishBeanFactoryInitialization
org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons
org.springframework.beans.factory.support.AbstractBeanFactory#getBean(java.lang.String)
获取Bean A
org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean
-> doGetBean(A)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String)
没有则返回null
org.springframework.beans.factory.support.DefaultListableBeanFactory#containsBeanDefinition
查看BeanDefinition是否已存在BeanName的实例,没有则返回
org.springframework.beans.factory.support.AbstractBeanFactory#markBeanAsCreated
创建状态标记
org.springframework.beans.factory.support.AbstractBeanFactory#getMergedLocalBeanDefinition
获取BeanName本地合并的RootBeanDefinition
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, org.springframework.beans.factory.ObjectFactory<?>)
获取单例Bean工厂对象
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[])
创建Bean
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean
执行Bean创建
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingletonFactory
A提前曝光对象 三级缓存BeanName到三级缓存工厂中【this.singletonFactories.put(beanName, singletonFactory);】
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
填充注入属性A的B
org.springframework.beans.factory.support.AbstractBeanDefinition#getPropertyValues
【itBean】获取注入属性值
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyPropertyValues
执行注入
org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveValueIfNecessary
解析注入属性 -> doGetBean(B) doGetBean(A)
org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveReference
解析运行时引用Bean
org.springframework.beans.factory.support.AbstractBeanFactory#getBean(java.lang.String)
获取Bean getBean(B) -> B提前曝光三级缓存池 ->注入B的属性A -> 解析运行时引用A ->getBean(A)
致此,实例化A、B到了三级缓存池,继续getBean(A)【A.B.A】
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, boolean)
从单例获取B实例的属性A Bean 【三级缓存取空,二级缓存取空,三级缓存工厂取BeanName,singletonFactory.getObject(),getEarlyBeanReference】
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#getEarlyBeanReference
获取到三级缓存暴露的Bean A
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, boolean)
将Bean A存入二级缓存中,移除BeanName A 在三级缓存工厂的工厂
org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean
获取到A的属性B中的A Bean
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#getObjectForBeanInstance
org.springframework.beans.factory.support.AbstractBeanFactory#getObjectForBeanInstance
获取Bean A实例 返回getBean(A)
org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveReference
返回A.b.a 的运行时引用解决
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#registerDependentBean
注册依赖Bean dependenciesForBean.add(BeanAName)
org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveValueIfNecessary
返回A.b.a属性解析
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyPropertyValues
返回执行属性注入
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
返回A.B.A填充
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean
返回A.B Bean创建,此时已完成B的A填充,将开始初始化A.B
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeAwareMethods
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeInitMethods
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean
返回A.B的初始化
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, boolean)
获取A.B的单例 null
org.springframework.beans.factory.support.AbstractBeanFactory#registerDisposableBeanIfNecessary
返回A.B的实例
org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, org.springframework.beans.factory.ObjectFactory<?>)
返回singletonFactory生成的单例
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingleton
将A.B设入三级缓存,移除三级缓存工程A.BName的工厂
org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean
返回A.B的getSingleton 单例获取
org.springframework.beans.factory.support.AbstractBeanFactory#getObjectForBeanInstance
返回A.B 实例对象
org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveReference
返回A的属性B运行时引用解析
此时填充A.B成功
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#registerDependentBean
注册A.B依赖
org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveValueIfNecessary
返回A.B属性解析
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyPropertyValues
返回A.B属性填充执行中
org.springframework.beans.AbstractPropertyAccessor#setPropertyValues(org.springframework.beans.PropertyValues, boolean, boolean)
属性注入
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
返回A的属性填充中
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean
返回A Bean的创建中
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition)
A Bean初始化 -> 返回A的创建中
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, boolean)
A Bean单例获取 null 返回Bean
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[])
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, org.springframework.beans.factory.ObjectFactory<?>)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingleton
将A设入三级缓存中 移除三级缓存工厂Aname 移除二级缓存Aname
org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean
返回
org.springframework.beans.factory.support.AbstractBeanFactory#getObjectForBeanInstance
org.springframework.beans.factory.support.AbstractBeanFactory#getBean(java.lang.String)
org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons
循环完成第一个Bean A的实例化
org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons
开启第二个Bean B的遍历
org.springframework.beans.factory.support.AbstractBeanFactory#isFactoryBean(java.lang.String)
是否工厂Bean
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, boolean)
获取Bean B 单例 返回 是否工厂Bean false
org.springframework.beans.factory.support.AbstractBeanFactory#getBean(java.lang.String)
获取Bean B
org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean
执行Bean B获取
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, boolean)
获取Bean B 单例 null 直接返回
org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons
循环遍历结束
此时 singletonObjects 单例池中Bean A\B 三级缓存工厂 0 二级缓存单例池 0
1
https://gitee.com/SebastianPan/LP1-2-IOC_Transaction.git
git@gitee.com:SebastianPan/LP1-2-IOC_Transaction.git
SebastianPan
LP1-2-IOC_Transaction
LP1-2-IOC_Transaction
master

搜索帮助