Spring源码:Bean生命周期(五).docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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)

152****4498 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档