使用注解定义Bean的初始化和销毁
Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法。
回顾配置文件的写法:
注解的写法:
(1)当bean被载入到容器的时候调用setup ,
注解方式如下:
@PostConstruct
初始化
(2)当bean从容器中删除的时候调用teardown(scope= singleton有效)
注解方式如下:
@PreDestroy
销毁
使用 @PostConstruct 注解, 标明初始化方法 ---相当于 init-method 指定初始化方法
使用 @PreDestroy 注解, 标明销毁方法 ----相当于 destroy-method 指定对象销毁方法
第一步:创建类:LifeCycleBean.java,定义构造方法、初始化的方法、销毁的方法。
//测试生命周期过程中的初始化和销毁bean
@Component("lifeCycleBean")
public class LifeCycleBean {
public LifeCycleBean() {
System.out.println("LifeCycleBean构造器调用了");
}
//初始化后自动调用方法:方法名随意,但也不能太随便,一会要配置
@PostConstruct//初始化的方法
public void init(){
System.out.println("LifeCycleBean-init初始化时调用");
}
//bean销毁时调用的方法
@PreDestroy
public void destroy(){
System.out.println("LifeCycleBean-destroy销毁时调用");
}
}
第二步:配置文件,配置spring容器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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.igeek.ioc"/>
beans>
第三步:使用SpringTest.java完成测试
@Test
public void testLifeCycle() throws Exception{
//spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//单例;此时初始化的方法已经被调用
LifeCycleBean lifeCycleBean = (LifeCycleBean)applicationContext.getBean("lifeCycleBean");
//方案一:
//((ClassPathXmlApplicationContext)applicationContext).close();
//方案二:
//反射的机制调用close方法。
//接口只是引用了一个对象。对象本身有这个方法。
//目标:通过接口引用,调用对象本来的拥有的方法
//1。获取对象具体类的某个方法:参数1方法名,参数2:方法里面的参数类型
Method method = applicationContext.getClass().getMethod("close");
//参数1:拥有该方法的对象的名字,参数2:方法里面的参数的值
method.invoke(applicationContext);
}
注意:如果要执行对象的销毁方法
条件一: 单例Bean (在容器close时,单例Bean才会执行销毁方法 )
条件二: 必须调用容器 close 方法