Spring DI 时序图
2021-06-16 17:44:21 2 举报
di
作者其他创作
大纲/内容
instantiate
getBean
在给定的BeanWrapper中,用beanDefinition中的所有属性填充至bean实例中,其中,可能存在依赖于其他bean的属性,则会递归初始依赖的bean,在递归初始依赖的bean的过程中并不是直接去实例化相关的bean,而是先检测缓存中是否有已经建好的对应的bean,或是否已经创建好的ObjectFactory
AbstractAutowireCapableBeanFactory
实现原理: 反射为属性赋值,如果存在循环依赖,使用三级缓存来处理: 一级缓存: 类成功实例化,属性也成功赋值 二级缓存: 类成功实例化,属性存在循环依赖、不能赋值 三级缓存: 类不能成功实例化 (指定使用构造器方法进行实例化,构造器中的参数存在循环引用) 在初始化完毕,会先遍历三级缓存进行依赖注入,放入一级缓存;然后遍历二级缓存,放入一级缓存;
CglibSubclassCreator
instantiateBean
applyPropertyValues
doCreateBean
对应默认的构造函数(即无参的构造函数),可直接调用实例化策略进行实例化
BeanUtils
createBeanInstance
ClassPathXmlApplicationContext
AbstractApplicationContext
instantiateWithMethodInjection
populateBean
resolveValueIfNecessary
实例化
instantiateClass
AbstractBeanFactory
BeanWrapperImpl
doGetBean
CglibSubclassingInstantiationStrategy
setPropertyValues
BeanDefinitionValueResolver
SimpleInstantiationStrategy
将属性应用到bean中
processLocalProperty
默认:无参构造,实例化过程
createBean
依赖注入
setPropertyValue
AbstractNestablePropertyAccessor
AbstractPropertyAccessor

收藏

收藏
0 条评论
下一页