springBean的生命周期

一.Bean 实例化的基本流程

        图中看出,在开始加载配置文件时,Spring容器会将每个<bean>标签的配置信息,封装成一个个的BeanDefinition信息对象,然后将每个BeanDefinition信息对象存在一个beanDefinitionMap的Map集合中,Spring框架再对Map集合进行遍历,使用反射创建Bean的实例对象,将创建好的实例对象又放在singletonObjects的Map集合中,最后当我们调用getBean()方法时,会从该Map集合中取出Bean实例对象返回。

二.Spring Bean的生命周期

        Spring Bean的生命周期是从 Bean 实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。

        SpringBean的生命周期主要包含四个阶段:实例化Bean --> Bean属性赋值 --> 初始化Bean -->销毁Bean

        在加载配置文件时,Spring容器将每个配置信息,封装成一个个的BeanDefinition信息对象,然后将每个BeanDefinition信息对象存在一个beanDefinitionMap的Map集合中,在BeanDefinitionMap填充完毕,Bean实例化之前执行Bean工厂后处理器。

        工厂后处理器分为BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor两个,其中BeanDefinitionRegistryPostProcessor是BeanFactoryPostProcessor的子接口专门用于注册BeanDefinition操作,BeanFactoryPostProcessor是一个接口规范,实现了该接口的类只要交由Spring容器管理的话,那么 Spring就会回调该接口的方法,用于对BeanDefinition注册和修改的功能。

        Bean被实例化后,到最终存到singletonObjects单例池之前,中间会经过Bean的初始化过程。因为Bean创建之后还仅仅是个"半成品",还需要依次对Bean实例的属性进行填充、执行一些Aware 接口方法,在bean中获得相应的Spring容器资源、执行Bean后处理器BeanPostProcessor的前置处理before方法、执行InitializingBean接口的初始化方法、执行自定义初始化init方法等、执行BeanPostProcessor的后置处理after方法。 

        经过初始化阶段,Bean就成为了一个完整的Spring Bean,被存储到单例池 singletonObjects中去了,就可以使用这个Bean,当Bean不再需要时,会进行销毁操作,即完成了Spring Bean的整个生命周期。


        Spring在进行属性注入时,会分为如下几种情况: 注入普通属性,String、int或存储基本类型的集合时,直接通过set方法的反射设置进去; 注入单向对象引用属性时,从容器中getBean获取后通过set方法反射设置进去,如果容器中没有,则先创建被注入对象Bean实例(完成整个生命周期)后,在进行注入操作; 注入双向对象引用属性时,会出现循环依赖。Spring提供了三级缓存存储完整Bean实例和半成品Bean实例 ,用于解决循环引用问题。

        一级缓存:存储实例化和初始化都完成的Bean。(singletonObjects)

        二级缓存:缓存半成品对象且当前对象已经被其他对象引用了。(earlySingletonObjects)

        三级缓存:缓存半成品对象,对象未被引用,使用时在通过工厂创建Bean。                z(singletonFactories)

        Aware接口是一种框架辅助属性注入的一种思想,是处理器的作用,为Bean生命周期各个阶段提供扩展。

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值