spring对象刷新源码分析
2020-06-13 17:38:15 0 举报
SpringIOC单例创建流程图
作者其他创作
大纲/内容
NO
解析bean的dependon依赖。根据依赖顺序进行对象的创建
为什么要设计三级缓存难道不能设计成二级缓存吗?
getSingleton(beanName)说明:singletonObjects,earlySingletonObjects,singletonFactories 尝试从三级缓存获取对象。
yes
回调处理结果==null或者自动注入是否为构造器注入
不是抽象&&单例&&非懒惰?
。。。。
this.finishBeanFactoryInitialization(beanFactory)
如果需要可以留言。还在制作中
通过有参构造器自动注入完成初始化
preInstantiateSingletons()
preInstantiateSingletons()说明:实例化所有剩余的(非延迟初始化)单例
放入一个匿名工厂bean
refresh
mbdToUse.prepareMethodOverrides()说明:准备方法复写
YES
getBean(beanName)
使用空构造器反射初始化
检查
beforePrototypeCreation(String beanName)说明:原型创建前的回调
afterSingletonCreation(beanName)说明:检测异常
结论:InstantiationAwareBeanPostProcessor接口回调postProcessAfterInstantiation方法完成实例化后置处理
beforeSingletonCreation(beanName)说明:用于检测是否存在循环引用导致的重复创建
afterPrototypeCreation(String beanName)说明:原型创建后的回调
InstantiationAwareBeanPostProcessor接口:
singletonObject = singletonFactory.getObject();
回调SmartInstantiationAwareBeanPostProcessor接口实现类处理提前暴露引用逻辑(是否需要对改原对象引用再次封装)
匿名内部类逻辑:
no
结论:InstantiationAwareBeanPostProcessor接口回调postProcessPropertyValues方法完成属性自动赋值
对应的getObject逻辑
beanProcessor接口:
匿名内部类逻辑通过beanDefination创建对象
对象是不是单例?
0 条评论
回复 删除
下一页