Spring getBean的全流程
2022-04-14 16:40:58 13 举报
Spring getBean的全流程
作者其他创作
大纲/内容
false
applypropertyValues
pvs == null?
true
containsBeanDefinition
resolveBeanClass
运用属性值上面过程只是将属性值解析出来,真正的设置是在该方法中进行
instanceofFactoryBean
other
isSingleton?
beanName转换因为我们传递的并不一定beanName,有可能是aliasName
getCachedObjectForFactoryBean
实例化 Bean
getParentBeanFactory
获取RootBeanDefinition
afterPropertiesSet
prototype
applyMergedBeanDefinitionPostProcessors
applyBeanPostProcessorsAfterInstantiation
null?
applyBeanPostProcessorsAfterInitialization
注册Disposable
parentBeanFactory且当前容器中没有该beanName,则调用父类容器进行初始化
从缓存中获取指定的BeanFactory
hasInstantiationAwareBeanPostProcessors
targetType == null
父类
beanName = parentName
getObjectForBeanInstance
根据type注入属性
前置处理器的应用
BeanWrapper
bean == null
激活自定义的init方法
applyBeanPostProcessorsBeforeInitialization
bean != null
parentnew RootBeanDefinition()
BeanFactory#getBean
instantiateUsingFactoryMethod
DependentBean 校验
instantiateBean
getObjectForFactoryBean
getParentName== null
初始化Bean
!beanName.equals(parentBeanName)
populateBean
这里会给InstantiationAwareBeanPostProcessors最后一次改变bean的机会
registerDisposableBeanIfNecessary
激活Aware方法
保证创建的bean是新的实例
获取parentBeanFactory递归获取RootBeanDefinition
创建Bean的核心流程
根据name注入属性
checkDependencies
returnbean
transformedBeanName
singleton
postProcessPropertyValues
bean = getSingleton
如果从单例模式没有获取bean,则尝试从父类beanFactory中获取
needsDepCheck
RootBeanDefinition md =getMergedLocalBeanDefinition(beanName)
doCreateBean
isEarlySingletonExposure
保证线程安全创建单例bean
transformedBeanName(parentName)
AbstractAutowireCapableBeanFactory#createBean
BeanClassLoaderAware
hasInstAwareBpps
factoryBeanInstanceCache
postProcessAfterinstantiation
从单例缓存中获取Bean三级缓存
获取实例化对象
RootBeanDefinitionmbd
createBeanInstance
Bean
obtainFromSupplier
initializeBean
addSingletonFactory
X
ConfiguredScope
new RootBeanDefinition()
因为从缓存中获取的Bean有可能不是我们需要的,还需要经过一番处理,才能真正的使用
invokeCustomInitMethod
BeanFactoryAware
AOP实现的重要步骤之一
isnull
invokeInitMethods
resolveBeforeInstantiation
后置处理器的应用
applyBeanPostProcessorsBeforeInstantiation
autowireConstructor
非常重要的一次校验
autowireByType
createBean
属性注入
确认该bean的class
getScope != null
AbstractBeanFactory#doGetBean
BeanNameAware
invokeAwareMethods
parent beanName转换
!=null
autowireByName
收藏
收藏
0 条评论
下一页