spring creatBean过程
2021-08-18 18:01:58 0 举报
spring creatBean过程
作者其他创作
大纲/内容
bean需实现MergedBeanDefinitionPostProcessor
BeanProcessor后置处理器
循环后置处理器
处理程序员自定义的Aware接口比如:ApplicationContextAware
初始化前
调用初始化方法
处理@PostConcustruct初始化方法
属性填充后调用bean后置处理器
BeanNameAwareBeanClassLoaderAwareBeanFactoryAware内置的三个Aware调用
推断构造方法,进行实例化
调用实现了InitializingBean中的Bean的afterPropertiesSet方法
InstantiationAwareBeanPostProcessor 后置处理器
主要是对BeanDefinition的修改
初始化后
该方法的结束代表创建过程结束
true:调用属性填充,@AutoWired
mbdToUse = new RootBeanDefinition(mbd):封装成BD
结束
调用返回一个bean对象
bean创建完成,返回bean对象,方法结束
返回调用结果
ApplicationContextAwareProcessor后置处理器
实例化前
返回不为空
该方法结束仅仅表示没有属性填充这个过程
实现了InitializingBean接口
这个后置处理器的方法是bean初始化后的方法,请注意,这个方法要懂,否则可能你的初始化会出一些问题 这个方法的意思就是获取到系统中的所有bean后置处理器,如果调用任何一个处理器返回了null,那么就直接返回了 原有的对象,也就不会再去执行后续的@PostConstruct的方法了 这个方法的 意思就是每一个bean都要去调用下系统中存在的后置处理器,比如系统中有4个后置处理器, 如果其中一个后置处理器返回null,那么这个工序就不会走下去了,就会直接返回了
实例化前也被叫做程序员人工干预bean的初始化,如果实例化前返回一个不为空的bean,那么bean的创建代表结束
该方法结束之时代表populateBean的结束,而不是下面的过程没有了
BD(BeanDefinition)中设置了initMethod的情况,需要调用初始化方法
实例化后调用后置处理器
处理程序员自定义的初始化前的方法postProcessBeforeInitialization
实例化
内置Aware调用
实例化前的后置处理器
方法结束
调用postProcessAfterInitialization
属性填充后
两段逻辑:1.InitializingBean初始化2.BD中的initMethod
加载类
creatBean过程
调用实例化前的后置处理器
合并bean后的后置处理器
instanceWrapper = this.factoryBeanInstanceCache.remove(beanName)
初始化
postProcessProperties,处理@AutoWired,@Resource等注解
postProcessAfterInstantiation
调用bean的初始化后方法
实例化后
false:本方法结束,不调用依赖注入@AutoWired
封装成一个新的RootBeanDefinition
0 条评论
回复 删除
下一页