spring源码08: 第二阶段前言

目录

spring源码目录
git注释项目地址:https://github.com/chaitou/spring-framework-master.git


前言

MyBean myTestBean = (MyBean) bf.getBean("myBean");

经历了第一阶段,Xml相关配置文件已经转换成了XmlBeanFactory的内部表示。通过getBean("myBean"),Spring将在Map中查询出key="myBean"BeanDefinition。再通过获取BeanDefinitionclass构造函数等信息,对Bean进行以下3个步骤(当然spring还有许多PostProcessors,AOP的介入等,暂且抓住主线):

  • createBeanInstance:实例化,就是调用对应的构造方法构造对象
  • populateBean:填充属性,这步对spring xml中指定的property进行populate填充
  • initializeBean:初始化,调用spring xml中指定的init方法,或者AfterPropertiesSet方法

最终生成用户所需要的Bean对象返回给用户,同时spring会根据scope的范围进行缓存,保存到不同的缓存中,以供下次调用,提高框架效率。下图是spring创建bean的顺序图,也可以说是spring bean的生命周期,具体怎么验证请参考:spring BeanPostProcessor 生命周期

spring创建Bean .jpg

重点(必读)

下面要讲的几点在开始第二阶段学习之前请务必记牢,说起来很简单,但是很多教程甚至是书本都出现的混淆。以下几点对理清第二阶段的脉络至关重要。

  1. Instance:实例化,也就是调用构造函数的过程,至此将通过调用class的构造方法生成一个对象,但是尚未进行属性填充以及初始化。这里切记切记不要跟初始化混淆,这里很多文章会写成初始化,实例化就是实例化,不是初始化!切记切记!
  2. populateBean:填充属性,这步对spring xml中指定的property进行populate填充,当然@Autowired属性也是在这里注入的。(@Autowired如果标记在构造函数上,则是在上一步Instance阶段做的)
  3. initialize:初始化,这个才是初始化。它是通过调用Instance生产的对象中自定义的init-method方法进行初始化的。这个才是初始化,不要跟实例化混淆!
  4. postProcessors:后置处理器,这是spring安插在各个阶段前后的方法。例如在initalizeBean前后可以通过重写applyBeanPostProcessorsBeforeInitializationapplyBeanPostProcessorsAfterInitialization方法进行一些自定义操作。所以后置处理器是有before和after区别的,别被这么名字混淆,后置处理器有before前置处理也有after后置处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值