bean的生命周期

Posted 晴天小猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bean的生命周期相关的知识,希望对你有一定的参考价值。

需要了解bean的生命周期如何开始,bean的生命周期经历了什么,以及bean的生命周期何时结束
1. 实例化 当bean被载入容器的时候,他的生命周期就开始了,前提是该bean的scope=singleton, 如何证明(你可以写一个singeton的bean 然后构造函数打印一点东西即可),spring 实例化bean时默认就是找无参数的构造方法,如果你写了参数的构造方法,必须要再写一个没有参数的构造方法,否则spring 实例化bean会失败
2. 属性赋值
3. 调用beanNameAware接口的setBeanName 方法, 该方法是spring在调用bean的时候自动会去执行的,setBeanName 方法接收一个String 类型的参数, 该参数就是当前正在被执行的bean的id,即配置文件里面的id
4.调用BeanFactoryAware 如果你实现了BeanFactoryAware 的 setBeanFactory接口则还可以得到bean 工厂
5. 调用ApplicationContextAware 如果你实现了setApplicationContext方法,则可以得到ApplicationContext的上下文
6.调用BeanPostProcessor (后置处理器) 该处理器是 你需要定义一个类,然后实现其接口,该接口需要实现两个方法 postProcessBeforeInitialization 和 postProcessAfterInitialization, 并将该类配置到spring 配置文件中, spring在调用每个bean之前会自动调用到该类执行before 和after
 
例如: 我定义的BeanPostProcessor
------------------------------------------------------------------------------------------
 
package com.BeanLifeCycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
 
/**
* Created by admin on 2017/12/9.
*/
public class Processor implements BeanPostProcessor{
@Override
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
System.out.println("Before 被调用");
return o;
}
 
@Override
public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
System.out.println("After 被调用");
return o;
}
}
----------------------------------------------------------------------------------------------------
 
将 BeanPostProcessor 加入到spring 配置文件 到时spring 会自动调它
<bean id="processor" class="com.BeanLifeCycle.Processor"/>
7. 如果你实现了 InitializingBean 的afterPropertiesSet 方法 则在后置处理器BeanPostProcessor 的before执行完毕后会执行该方法。
8. 如果你的bean 对应的class 还定义了 一个 初始化的方法并且配置到bean的配置文件中,则会执行该i初始化方法,在 InitializingBean 执行完毕之后
初始化方法配置大概如下<bean init-method="myInit"></bean>
9.调用postProcessAfterInitialization 方法
10.可以使用bean了
11.容器销毁,可以定制销毁方法
可以在spring的配置文件里面配置 <bean destory-method="myDestory"></bean>
然后我们写这个方法就可以了,一般用于关闭一些资源
 
 

以上是关于bean的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

springbean的生命周期是啥?

spring bean的生命周期是怎样的,代码示例

SpringFilter生命周期Servlet生命周期bean的生命周期

Bean的生命周期流程-上

Bean的生命周期流程-上

Spring文档苦读短生命周期的Bean注入长生命周期的Bean