- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
Spring源码:Bean生命周期(五)
在上一篇文章中,我们深入探讨了Spring框架中Bean的实例化过程,该过程包括从Bean定义中加载当前类、寻找所有实现了InstantiationAwareBeanPostProcessor接口的类并调用实例化前的方法、进行实例化、调用applyMergedBeanDefinitionPostProcessors方法等多个步骤,最终生成了一个真正的Bean实例。但是,这个Bean实例还没有被初始化和注入属性,还不能真正发挥作用。
在今天的文章中,我们将深入探讨Bean的属性注入和初始化流程,从而使其成为一个真正意义上的Bean。这个过程包括属性注入、Aware接口回调、BeanPostProcessor的前置和后置处理等多个步骤,通过本文的学习,读者将能够更深入地了解Spring框架中Bean的属性注入和初始化过程,为后续的学习和实践打下坚实的基础。
populateBean
在Spring框架中,属性注入是Bean初始化过程中的一个重要环节。在Bean实例化完成后,Spring框架会根据Bean定义中的属性设置进行属性注入,同时还会调用一些Aware接口回调方法,以及一些BeanPostProcessor的前置和后置处理方法,最终完成Bean的初始化过程。好的,抛去不用看的,我们来看下剩下的源码:
protectedvoidpopulateBean(StringbeanName,RootBeanDefinitionmbd,@NullableBeanWrapperbw){
......
PropertyValuespvs=(mbd.hasPropertyValues()mbd.getPropertyValues():null);
intresolvedAutowireMode=mbd.getResolvedAutowireMode();
if(resolvedAutowireMode==AUTOWIRE_BY_NAME||resolvedAutowireMode==AUTOWIRE_BY_TYPE){
//MutablePropertyValues是PropertyValues具体的实现类
MutablePropertyValuesnewPvs=newMutablePropertyValues(pvs);
//Addpropertyvaluesbasedonautowirebynameifapplicable.
if(resolvedAutowireMode==AUTOWIRE_BY_NAME){
autowireByName(beanName,mbd,bw,newPvs);
//Addpropertyvaluesbasedonautowirebytypeifapplicable.
if(resolvedAutowireMode==AUTOWIRE_BY_TYPE){
autowireByType(beanName,mbd,bw,newPvs);
pvs=newPvs;
booleanhasInstAwareBpps=hasInstantiationAwareBeanPostProcessors();
booleanneedsDepCheck=(mbd.getDependencyCheck()!=AbstractBeanDefinition.DEPENDENCY_CHECK_NONE);
PropertyDescriptor[]filteredPds=null;
if(hasInstAwareBpps){
if(pvs==null){
pvs=mbd.getPropertyValues();
for(InstantiationAwareBeanPostProcessorbp:getBeanPostProcessorCache().instantiationAware){
//这里会调用AutowiredAnnotationBeanPostProcessor的postProcessProperties()方法,会直接给对象中的属性赋值
//AutowiredAnnotationBeanPostProcessor内部并不会处理pvs,直接返回了
PropertyV
文档评论(0)