有时候需要在bean的生命始末做一些自己的操作
接口
package com.hk.spring.ba06;
public interface ISomeSerice {
public String doFirst();
public void doSecond();
}
接口实现类
package com.hk.spring.ba06;
public class ISomeServiceImpl implements ISomeSerice {
public ISomeServiceImpl() {
System.out.println("无参构造器被执行");
}
public ISomeServiceImpl(int a) {
System.out.println("无参构造器被执行"+a);
}
@Override
public String doFirst() {
System.out.println("执行doFirst");
return "hello spring";
}
@Override
public void doSecond() {
System.out.println("执行doSecond");
}
//普通方法,需要注册
public void initAfter(){
System.out.println("初始化之后");
}
public void perDestroy(){
System.out.println("销毁之前");
}
}
bean配置
<?xml version="1.0" encoding="UTF-8"?>
<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 definitions here -->
<!-- 注册 service对象 ISomeSerice iSomeService = new ISomeServiceImpl();
创建的时间是Spring容器被初始化是时候
配置初始化后要执行的方法和销毁前执行的方法
-->
<bean id="someService" class="com.hk.spring.ba06.ISomeServiceImpl" init-method="initAfter" destroy-method="perDestroy"/>
</beans>
测试方法
package com.hk.spring.ba06;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Mytest {
/**
* 定制bean的生命始末
*/
@Test
public void test_1(){
//加载Spring配置文件 创建Spring容器对象
String resource = "/com/hk/spring/ba06/applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(resource);
//从容器中获取指定bean对象
ISomeSerice iSomeService = (ISomeSerice) ac.getBean("someService");
String result = iSomeService.doFirst();
System.out.println(result);
iSomeService.doSecond();
// 销毁方法的执行有两个要求
// 一、被销毁的对象要是singleton,即单例的(默认就是单例的)
// 二、容器要被显示的关闭(ApplicationContext没有close方法,但它的实现类有)
((ClassPathXmlApplicationContext) ac).close();;
}
}
运行结果
无参构造器被执行
初始化之后
执行doFirst
hello spring
执行doSecond
销毁之前