Spring容器通过配置可以实现对每个 bean初始化时的查找和销毁时的回调调用。这也就是说,一个应用的开发者可以借助于初始化的回调方法init() 轻松的写一个类(不必像XML配置文件那样为每个bean都配置一个'init-method="init"'属性)。Spring IoC容器在创建bean的时候将自动调用这个方法。
为了完全弄清如何使用该特性,让我们看一个例子。
首先,创建一个Bean
package cn.csdn.cycle;
public class CycleLife {
private String var;
public void setVar(String var) {
this.var = var;
}
public void display() {
System.out.println("J2EE Spring:" + var);
}
public void init() {
System.out.println("调用初始化方法init()....");
}
public void destroy() {
System.out.println("调用销毁方法destroy()....");
}
}
其次,在xml文件中对你创建的Bean进行相应的配置,这里我将xml文件取名为applicationContext.xml
<bean id="cle" class="cn.csdn.cycle.CycleLife" init-method="init"
destroy-method="destroy">
<property name="var">
<value>Hello</value>
</property>
</bean>
第三,新建一个JUnit用例测试你的应用(当然,你亦可以创建一个含有main()方法的Java类测试)
@Test
public void test() {
ApplicationContext ac = new ClassPathXmlApplicationContext(
new String[] { "application*.xml" }); //执行此行代码时即调用init()方法
CycleLife cle = (CycleLife) ac.getBean("cle");
cle.display();
//注意下面的代码,它主要用来调用destroy()方法
AbstractApplicationContext aac = (AbstractApplicationContext) ac;
aac.close();
}
使用这个功能可以把你从为每个bean指定初始化和销毁回调的繁杂工作中解救出来。为了一致性,应该强制性的为初始化和销毁回调方法采用一致的命名规则。
在前面的基础上,我们再来分析一下实现了BeanPostProcessor接口的Bean的生命周期。同样,举例来加以说明。
首先呢,我们创建三个JavaBean,第一个同上面的CycleLife.java,这里只创建另外两个,TempService.java代码清单如下:
package cn.csdn.cycle;
public class TempService {
private String str;
public void setStr(String str) {
this.str = str;
}
public void init() {
System.out.println("这是TempService:" + str);
}
}
PostService.java代码清单:
package cn.csdn.cycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class PostService implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessAfterInitialization");
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessBeforeInitialization");
if (bean instanceof TempService) {
((TempService) bean).setStr("sxpgog");
}
return bean;
}
}
applicationContext.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="ps" class="cn.csdn.cycle.PostService"></bean>
<bean id="ts" class="cn.csdn.cycle.TempService" init-method="init"></bean>
<bean id="cle" class="cn.csdn.cycle.CycleLife" init-method="init"
destroy-method="destroy">
<property name="var">
<value>^_^</value>
</property>
</bean>
</beans>
测试代码同上面的JUnit用例,这里我就不再写了。执行后的效果如下:
postProcessBeforeInitialization
这是TempService:sxpgog
postProcessAfterInitialization
postProcessBeforeInitialization
调用初始化方法init()....
postProcessAfterInitialization
J2EE Spring:^_^
调用销毁方法destroy()....
从上面的案例中我们不难发现,postProcessBeforeInitialization()方法是在init()方法之前执行。也就是说,在IoC对Bean进行初始化之前我们还可以做一些前期的处理,例如在上面的postProcessBeforeInitialization()方法中我们对Bean中的str进行赋值(重新赋值)的操作,这也从另外一个方面说明,postProcessBeforeInitialization()方法在setter()方法之前执行。
分享到:
相关推荐
spring bean 的生命周期,把运行结果的日志,用sublime打开对比查看,你会有比较清晰的认识
Spring bean生命周期demo
这个工程主要实现了: Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)
Springbean生命周期
SpringBean的生命周期.mdj
Spring管理的Bean的生命周期
此资源是我的博客bean的生命周期的测试代码,只有源代码,没有相关库文件,环境是spring4.2 ,
主要给大家介绍了Spring中Bean的生命周期和作用域及实现方式的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
学习Spring过程中,使用Eclipse调试Spring源码的关键断点文件。
介绍了Spring的Bean周期,容器周期,工厂周期,运行代码后可以看到运行结果
* * * 上图中,Bean的生命周期的整个执行过程描述如下。 (1)根据配置情况调用Bean构造方法或工厂方法实例化Bean。 (2)利用依赖注入来完成Bean中所有属性值的配置注入。 (3)如果Bean实现了BeanNameAware接口,...
Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。这篇文章主要介绍了Spring Bean 生命周期,需要的朋友可以参考下
深度解析 Spring 源码探寻Bean的生命周期
NULL 博文链接:https://cici9898-007.iteye.com/blog/1407695
浅尝Spring注解开发_Bean生命周期及执行过程.doc
一般情况下,我们只是关心如何正确地将Bean装配到容器中,并不关心Ioc容器是如何装配和销毁Bean的过程。但是恰恰有时候,我们需要自定义初始化或销毁Bean的过程,以满足一些“特殊的”需求。比如,数据源在关闭的...
今天小编就为大家分享一篇关于spring中bean的生命周期详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
本文主要介绍 Spring IoC 容器如何管理 Bean 的生命周期。 在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打开网络连接等,同时,在结束服务时,也有一些相对...
Spring Bean 生命周期之“我从哪里来?”