springIOC初始化容器
2021-03-18 10:30:45 16 举报
springIOC初始化容器
作者其他创作
大纲/内容
初始化
创建A对象
无
getproxy
有
二级缓存
一级缓存
new
getBean(A.class)
IOC Container
用户使用
三级缓存
BeanFactoryPostProcessor
反射创建对象Constructor cro = clazz.getConstructor()Object obj = cro.newInstance
注解
尝试获取B对象
Aop
调用BeanPostProcesser的befortInit方法
如果想在用户自定义的的bean中使用spring容器中提供的bean
初始化init-method
依赖属性b
抽象接口
先从缓存找
返回成品A对象
BeanDefinition 定义Bean信息
赋值
1:当一个对象需要创建动态代理对象的时候,普通的原始对象会不会被创建? 肯定会2:整个生命周期中,同名的bean能不出存在两个? 肯定不能3:如果一个原始对象需要创建代理对象,又需要原始对象,那怎么办?代理对象会覆盖原始对象,当需要被调用或暴露的时候,只能有一个对象存在4:在程序的调用过程中,我怎么知道会什么时候呗调用?不知道,所以要在第一次调用的时候,检测是否需要创建动态代理对象,如果需要,直接将动态代理对象覆盖原始对象暴露出去,如果不需要直接暴露原始对象5:怎么进行检测?调用之前通过函数型接口(钩子函数)来检测调用,也就是说每次创建对象的时候,优先放到三级缓存中,三级缓存的value是一个钩子函数,此表达式不会执行,在实际调用的时候,通过getObject方法才会调用执行,返回具体的对象
缓存Map
PostProcessor
BeanPostProcesser
getObjectType
getBean(B.class)
判断容器中是否有A
这里应该结束
实例化B对象a =null
实例化
实现Aware接口
在after中crateProxy
FactoryBean
xml
成品对象
尝试获取A对象
注入属性b
FactoryBean创建一些独有特色的bean
isSingleton
返回成品B对象
意义:在应用程序上下文的标准初始化之后修改它的内部bean工厂
对象实例化
spring完整生命周期
BeanFactoryPostProcessorbean工厂后置处理器
调用BeanPostProcesser的afterInit方法
解析
增强器(后置处理器)
实例化A对象
意义
返回半成品A对象
判断容器中是否有B
自定义
BeanFactory工厂
beanDefineReader抽象定义相关解析规范,方便以后扩展
bean对象
依赖属性a
初始化A对象
BeanFactory:一个跟接口对于访问spring容器
将第二步中实例化A对象返回
BeanDefinitionMap
如果当前程序中没有Aop的实现,那么循环问题可以通过一二级缓存直接来解决,当存在Aop逻辑的时候,就需要加入三级缓存,因为spring框架不知道你有没有aop的实现,那么默认都是加入三级缓存的,
放入
容器使用
Bean
填充属性populateBean
完整对象
getObject
A实例化b=null
注入,直接赋值
BeanPostProcessor
context.getBean()
正常单例没有Aop一二级缓存就可以解决循坏依赖问题
注入属性a
解决Apo循环依赖问题
实例化B对象
实例化前如果要修改bean信息
半成品对象
创建B对象
收藏
0 条评论
回复 删除
下一页