Spring框架 -- Bean的生命周期

前言

Spring框架,承上文,已经基本了解了复习了关于Bean工厂,以及ApplicationContext,

复习了Sping 的一个心脏,和身躯的区别。

从结构上面看。Bean工厂作为根类接口,方法比较有限,但是从Application显然对Bean方法进行了增强,比如全自动实例化,不需要一个个实例化,增加了国家化messageResource服务,以及增强了ResourceLoader的强化,同时包括对拦截器等增强。现在使用xmlBeanFactory比较少了。

在应用当中一般用两个实现类,直接获取ApplicationContext,

ClassPathXmlApplicationContext。以及FileSystemXmlApplicationContext。自动加载,避免了BeanFactory的延时加载。所以说ApplicationContext是Spring的心脏的扩展表述为Spring容器不为过。

那么获得的Bean 他的生命周期是怎么回事。我罗列了一些知识。由于等级不高,只能大概对于他有个了解记忆,具体的需要下源码来分析。

整体Bean的生命周期如下面网络逻辑图所示

结构
在这里插入图片描述

走一下流程

当调用者通过 getBean(beanName)向容器请求某一个 Bean 时

如果容器注册了
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor 接口,在实例化 Bean 之前,

第一步

调用接口方法 postProcessBeforeInstantiation()

根据配置情况调用 Bean 构造函数或工厂方法实例化 Bean;
Bean被创建出来

第二步

在实例化 Bean 之后,调用该接口的 **postProcessAfterInstantiation()**方法,对已经实例化的对象进行一些“修饰”

第三步

如果 Bean 配置了属性信息,容器在这一步着手将配置值设置到 Bean 对应的属性中

在设置每个属性之前将先调用 该接口 **postProcessPropertyValues()**方法

设置属性值

如果 Bean 实现了 org.springframework.beans.factory.BeanNameAware 接口,将调用
setBeanName()接口方法,将配置文件中该 Bean 对应的名称设置到 Bean 中

如果 Bean 实现了 org.springframework.beans.factory.BeanFactoryAware 接口,将调用 setBeanFactory()接口方法,将 BeanFactory 容器实例设置到 Bean 中;

如果 BeanFactory 装配org.springframework.beans.factory.config.BeanPostProcessor
后处理器,将调用 BeanPostProcessor 的 Object postProcessBeforeInitialization(Object bean,
String beanName)接口方法对 Bean 进行加工操作。其中入参 bean 是当前正在处理的 Bean,而 beanName 是当前 Bean 的配置名,返回的对象为加工处理后的 Bean。用户可以使用该方法对某些 Bean 进行特殊的处理,甚至改变 Bean 的行为,BeanPostProcessor 在 Spring 框架中占有重要的地位,为容器提供对 Bean 进行后续加工处理的切入点,Spring 容器所提供的各种“神奇功能”(如 AOP,动态代理等)都通过 BeanPostProcessor 实施;

如果 Bean 实现了 InitializingBean 的接口,将调用接口的 afterPropertiesSet()方法

如果在通过 init-method 属性定义了初始化方法,将执行这个方法

BeanPostProcessor 后处理器定义了两个方法:其一是postProcessBeforeInitialization()

其二 Object postProcessAfterInitialization(Object bean, String beanName)方
法,这个方法在此时调用,容器再次获得对 Bean 进行加工处理的机会;

如果在中指定 Bean 的作用范围为 scope=“prototype”,将 Bean 返回给调用
者,调用者负责 Bean 后续生命的管理,Spring 不再管理这个 Bean 的生命周期。如果作用
范围设置为 scope=“singleton”,则将 Bean 放入到 Spring IoC 容器的缓存池中,并将 Bean引用返回给调用者,Spring 继续对这些 Bean 进行后续的生命管理;

对于 scope=“singleton”的 Bean,当容器关闭时,将触发 Spring 对 Bean 的后续生
命周期的管理工作,首先如果 Bean 实现了 DisposableBean 接口,则将调用接口的
afterPropertiesSet()方法,可以在此编写释放资源、记录日志等操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值