finishBeanFactoryInitialization流程

设置类型转换
设置值处理器
冻结BD
开始实例化
AbstractApplicationContext$#finishBeanFactoryInitialization(beanFactory)
beanFactory.setConversionService
beanFactory.addEmbeddedValueResolver
beanFactory.freezeConfiguration
beanFactory.preInstantiateSingletons
取出所有BD并进行遍历
yes
no
DefaultListableBeanFactory#preInstantiateSingletons
isFactoryBean(beanName) ?
getBean(beanName)
& + beanName

这段逻辑其实就是:如果是factoryBean的话, 就把beanName加个&号,传入getBean里获取bean,这里只处理单例bean, 如果是非单例, 在使用的时候直接调用getBean。 下面看getBean逻辑。

AbstractBeanFactory#getBean(beanName)
AbstractBeanFactory#doGetBean(beanName)

doGetBean有两部分逻辑:
1、获取bean(getObjectForBeanInstance(beanInstance))

获取FactoryBean也就是&+beanName
获取普通bean
获取factoryBean的实际bean
AbstractBeanFactory#getObjectForBeanInstance(beanInstance)
BeanFactoryUtils.isFactoryDereference(name)
!(beanInstance instanceof FactoryBean)
return object

FactoryBean的详细流程: click here.

2、实例化bean

先创建被依赖的bean
创建单例
创建原型
创建其他
getParentBeanFactory()
mbd.getDependsOn()
Singleton createBean()
Prototype createBean()
getScope ecreateBean()
处理requiredType
bean的生成方式一MethodOverrides
bean的生成方式二InstantiationAwareBeanPostProcessors
AbstractAutowireCapableBeanFactory#createBean(beanName)
mbdToUse.prepareMethodOverrides()
resolveBeforeInstantiation(beanName)
doCreateBean(beanName)

bean的生成方式一MethodOverrides: click.

bean的生成方式三instanceSupplier
bean的生成方式四FactoryMethod
bean的生成方式五 反射
以上这些步骤 beanInstance已经生成下面这步处理beanInstance里的注解
填充属性
初始化bean
invokeAwareMethods主要是spring用的可以重写
BeanPostProcessor前置处理
BeanPostProcessor后置处理
AbstractAutowireCapableBeanFactory#doCreateBean
AbstractAutowireCapableBeanFactory#createBeanInstance
obtainFromSupplier(instanceSupplier, beanName)
instantiateUsingFactoryMethod(beanName, mbd, args)
instantiateBean(beanName, mbd)
applyMergedBeanDefinitionPostProcessors
populateBean(beanName, mbd, instanceWrapper)
initializeBean(beanName, exposedObject, mbd)
invokeAwareMethods
applyBeanPostProcessorsBeforeInitialization
invokeInitMethods
applyBeanPostProcessorsAfterInitialization

bean的生成方式三instanceSupplier: click.
applyMergedBeanDefinitionPostProcessors包含两个重要的注解处理类,详见:
click.
重要的BeanPostProcessor:
1、ApplicationContextAwareProcessor 完成aware接口子类的设置工作
2、ApplicationListenerDetector:click.
@Autowire是什么注入方式:
https://blog.csdn.net/weixin_40698359/article/details/86065031
populateBean 属性填充细节
https://blog.csdn.net/qq_20009015/article/details/106379010

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值