Spring Ioc整理
2021-09-28 00:02:23 9 举报
Spring Ioc
作者其他创作
大纲/内容
beanclass
yes
invokeBeanFactoryPostProcessors 后置处理器注册过程
earlysingletonObjects
注册成BeanDefinition
xxx的Definition
lazyInit
doCreateBean()
加入三级
dependsOn
解析@Import
car
?
propertyValus
二三级缓存
Classloader
如果符合生产标准BeanFactory.getBean()生产
suv
加入二级缓存
suv的Definition
singletonFactories
从概念态-->定义态过程1实例化ApplicationContext对象2调用bean工厂的后置处理器扫描所有的。class类;有@Component注解注册成BeanDefinition3实例好的BeanDefinition对象put到BeanDefinitionMap当中缓存起来4再次调用其他bean的工厂后置处理器--纯净态--5当然spring还会干很多事,比如国际化,比如注册BeanPostProcessor、监听器等6BeanFactoryInitlization开始准备生产实例化出单例的bean,实例化之前需要验证,遍历所有扫描出的类,依次判断这个bean是否Lazy、是否Prototype(单例)、是否abstract等等;7容器看下有没有已经创建好的bean,有的话直接返回--实例化--8验证完成之后,spring在实例化一个bean之前,需要推断使用哪个构造方法,因为spring实例化对象是通过构造方法的反射,故需要知道用哪个构造方法;--属性注入--9推断完构造方法之后,调用构造方法反射实例化一个对象;注意这里是对象!这时候实例化出来的不是一个完整的bean;10开始DI属性注入;比如@autowride11如果需要di注入则开始属性注入、---初始化---12判断bean的类型回调Aware接口13调用生命周期回调方法14如果需要aop代理则完成代理15put到单例池(map)--bean完成----在spring中存在
BeanFactory
准备生产getBean
判断是否符合
属性赋值Populate(bytypy/byName/@autoWride将属性注入进去)
jvm加载到内存car.classTank.class
addSingleton()
invokeBeanFactoryPostProcessors 后置处理器
no
getSingleton是否创建完成
定义态 DefinitionMaps
循环扫描路径com.xx.class 类信息·
纯净态
初始化Instantiation(AOP)
InitMethodName
一级缓存 ConcurrentHashMap<>()
xml配置注解配置JavaConfig
实例化Instantiation(反射)
<bean id=\"car\" class=“cn.xx.Car”><bean id=\"Tank\" class=“cn.xx.Tank”>
概念态
Definition
scope
解析@ComponentScan
autowireMode
classname
car的Definition
扫描@Component
单例not懒加载not抽象
解析@ImportResource
put
收藏
0 条评论
回复 删除
下一页