Spring Bean的生命周期

Spring中的Bean代表被Spring IOC容器管理的对象。IOC容器通过配置文件的Bean标签或者注解,创建Bean对象并管理其生命周期。

Spring Bean的生命周期是指从 Bean 实例化,即通过反射创建出对象之后,到成为一个完整对 象,最终存 储到单例池中的过程。 大体上分为三个阶段:

第一阶段:Bean的实例化阶段。Spring框架会取出BeanDefinition的信息,判断当前Bean的范围是否是singleton, 是否延迟加载,是否FactoryBean等,最终将一个普通singleton的Bean通过反射进行实例化;

第二阶段:Bean的初始化阶段。Bean创建之后还仅仅是个"半成品",还需要对Bean实例的属性进行填充、执行一些Aware 接口方法、BeanPostProcessor方法、InitializingBean接口的初始化方法、执行自定义初始化init方法等。

第三阶段:Bean的完成阶段:经过初始化阶段,Bean就成为了一个完整的Spring Bean,被存储到单例池singletonObjects中,即完成了Spring Bean的整个生命周期。

下面分别介绍实例化与初始化阶段的具体流程:

Bean的实例化:

  1. 加载xml配置文件,解析获取配置中的每个的信息,封装成一个个的BeanDefinition对象;

2.将BeanDefinition存储在一个名为beanDefinitionMap的Map<String,BeanDefinition>中;

3.执行Bean工厂后处理器BeanFactoryPostProcessor,目的是动态注册BeanDefinition,动态修改BeanDefinition,以及动态修改Bean;

4.ApplicationContext底层遍历beanDefinitionMap,创建Bean实例对象;

5.创建好的Bean实例对象,被存储到一个名为singletonObjects的Map<String,Object>中;

当执行applicationContext.getBean(beanName)时,从singletonObjects去匹配Bean实例并返回。

Bean的初始化:

1.Bean实例的属性注入,有以下几种情况:1.注入普通属性,String、int或存储基本类型的集合时,直接通过set方法的反射设置进去; 2.注入单向对象引用属性时,从容器中getBean获取后通过set方法反射设置进去,如果容器中没 有引用对象,则先创建被注入对象Bean实例(完成整个生命周期)后,再进行注入操作;3.注入双向对象引用属性时,涉及到循环引用(循环依赖),通过三级缓存解决;

2.Aware接口属性注入:Spring中提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化之后,可以获取相应资源。通过该接口,可以对spring相应资源进行操作。例如ApplicationContextAware、BeanNameAware;

3.调用后处理器BeanPostProcessor的postProcessBeforeInitialization()方法;

4.调用InitializingBean接口的初始化方法afterPropertiesSet();

5.调用自定义初始化方法init();

6.调用后处理器BeanPostProcessor的postProcessAfterInitialization()方法;

Bean后处理器类似于Bean工厂后处理器相似,它也是一个接口,实现了该接口并被容器管理的BeanPostProcessor,会在流程节点上被Spring自动调用,以实现对Bean的动态修改。

经过实例化与初始化阶段,Bean就成为了一个完整的Spring Bean,被存储到单例池singletonObjects中,即完成了Spring Bean的整个生命周期,Bean可以正常使用及销毁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值