Spring bean的生命周期

IOC容器中Bean的生命周期

​ 我们之前讲解过Servlet生命周期,生命周期就是从初始化到销毁的过程,那么我们SpringIOC容器是用来管理bean的,所以又叫做Bean容器或者IOC容器,既然bean是在容器容器中管理的,那么肯定在容器中存在生命周期的过程。之前我们看到了bean的实例化和bean的设置属性到bean的使用,但是这些过程不能够完全的表示bean的生命周期,在Spring中,可以配置bean的初始化和销毁操作。

下面我们通过程序来看一下bean的生命周期

public class Person {
private String name;

public String getName() {
	return name;
}

public void setName(String name) {
	System.out.println("调用bean的set方法");
	this.name = name;
}

public Person() {
	
	super();
	System.out.println("bean被实例化");
}

public Person(String name) {
	super();
	this.name = name;
	System.out.println("bean被实例化");
}

public void init() {
	System.out.println("bean被初始化了");
}

public void destory() {
	System.out.println("bean被销毁了");
}
@Override
public String toString() {
	return "Person [name=" + name + "]";
}
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="person" class="com.nhkj.life.Person" init-method="init" destroy-method="destory">
		<!-- <constructor-arg value="阿狸"></constructor-arg> -->
	<!--<constructor-arg value="阿狸" index="0"></constructor-arg> -->
		<property name="name" value="妲己"></property>
	</bean>

</beans>

以上是实体类和spring的配置文件,下面我们来编写测试类

public class Main {
public static void main(String[] args) {
	ConfigurableApplicationContext act = new ClassPathXmlApplicationContext("life.xml");
	Person person = act.getBean(Person.class);
	System.out.println(person);
	//关闭容器
	act.close();
}
}

程序输出的结果如下:

我们现在可以完整的通过程序运行观察bean的生命周期了:

  1. bean实例化
  2. 调用bean的setter方法
  3. bean初始化
  4. bean可以使用了
  5. bean销毁(容器关闭的时候bean进行销毁)

为了更加细致的观察bean的生命周期,我们可以使用bean的后置处理器。

二. bean的后置处理器

BeanPostProcessor这个接口表示的是bean的后置处理器,里面有两个方法:

  • Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException 表示在bean初始化方法之前执行
  • Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException表示在bean初始化方法之后执行

实现bean的后置处理器:

定义实现类,实现BeanPostProcessor接口,并且复写两个方法

public class MyBeanPostProcessor implements BeanPostProcessor {/**

​	 * 	postProcessBeforeInitialization : 在bean初始化方法之前执行

​	 */@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

​		System.out.println("postProcessBeforeInitialization.....");return bean;}/**

​	 * 	postProcessAfterInitialization : 在bean初始化方法之后执行

​	 */@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

​		System.out.println("postProcessAfterInitialization.....");return bean;}


}

编写好了之后我们需要进行配置

- 配置bean的后置处理器:当做普通的bean一样配置到IOC容器中

<!-- 后置处理器和普通bean一样配置到IOC容器中 -->	

<bean id="beanPostProcessor" class="com.nhkj.life.MyBeanPostProcessor"></bean>

这个时候bean的后置处理器就可以使用了,测试一下,这个时候,bean的生命周期变成了:

  • bean实例化
  • 调用bean的setter方法
  • 执行bean后置处理器的前置方法
  • bean初始化
  • 执行bean后置处理器的后置方法
  • bean可以使用了
  • bean销毁(容器关闭的时候bean进行销毁)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值