Spring初始化创建对象流程
2022-03-02 17:17:30 0 举报
Spring初始化创建对象流程
作者其他创作
大纲/内容
处理getObjectForBeanInstance
如果不为空
AbstractBeanFactory.getBean(beanName)获取对象
addSingleton缓存到容器并从singletonFactories移除
是beanName 加上&
执行InitializingBean.afterPropertiesSet
getSingleton从容器缓存获取对象
getEarlyBeanReference修改返回的引用对象
AbstractBeanFactory.doGetBean获取对象
populateBean设置属性
applyMergedBeanDefinitionPostProcessors回调缓存BeanDefinition
是加入到singletonFactories集合中
判断是否需要处理循环依赖
执行BeanPostProcessor.postProcessAfterInitialization
BeanPostProcessor.postProcessAfterInitialization
refresh.preInstantiateSingletons()实例化所有对象
AutowireAnnotationBeanPostProcessor根据类型依赖注入@Autowired
postProcessAfterInstantiation返回false则不需要后续的属性注入
AUTOWIRE_BY_TYPE根据set方法参数类型自动注入
postProcessBeforeInstantiation
执行BeanPostProcessor.postProcessBeforeInitialization
getSingleton创建对象并返回
resolveBeforeInstantiation执行实例化之前的回调
是集合中获取
initializeBean初始化对象
否
isFactoryBean是否 FactoryBean
InstantiationAwareBeanPostProcessor后置处理器
doCreateBean创建对象
postProcessPropertyValues属性自动注入
singletonsCurrentlyInCreation是否正在创建
afterSingletonCreation从正在创建集合中移除
singletonFactories中移除
执行init-method
是返回对象
通过Field.set反射设置值属性
从singletonsCurrentlyInCreation集合移除
是
加入singletonsCurrentlyInCreation集合
SmartInitializingSingleton后置处理器
singletonObjects获取成功
MergedBeanDefinitionPostProcessor后置处理器
Disposable注册销毁接口
AUTOWIRE_BY_NAME根据set方法属性名自动注入
回调afterSingletonsInstantiated方法
是否 FactoryBean 类型
实例化创建对象1.配置了 lookup-method 或 replace-method,使用CGLIB创建对象2.否则通过反射调用构造方法创建对象
SmartInstantiationAwareBeanPostProcessor后置处理器
singletonFactories提前暴露对象集合
通过调用Method.invoke反射设置参数类型
否返回创建的对象
否返回null
返回对象
回调BeanNameAware, BeanClassLoaderAware,BeanFactoryAwareAware设置属性
调用getObject 返回
postProcessMergedBeanDefinition缓存信息
FactoryBean 类型处理
如果不为空直接返回终止后续流程
1.单例对象2.allowCircularReferences默认true3.存在于singletonsCurrentlyInCreation集合中
AbstractAutowireCapableBeanFactory.createBean创建对象
收藏
收藏
0 条评论
下一页