1.搭建一个简单的Spring环境
2.定义一个接口及其实现类
package com.roger.service;
public interface SpringLifeCycleService {
void springLifeCycle();
}
package com.roger.service.impl;
import com.roger.service.SpringLifeCycleService;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.concurrent.atomic.AtomicInteger;
public class SpringLifeCycleServiceImpl implements SpringLifeCycleService, InitializingBean, DisposableBean {
private AtomicInteger sortNum = new AtomicInteger(1);
private SpringLifeCycleServiceImpl() {
System.out.println(sortNum.getAndIncrement() + "-构造器方法开始执行....");
}
public void initMethod() {
System.out.println(sortNum.getAndIncrement() + "-Spring XML配置文件中添加init-method属性的,在IOC容器初始化之后开始执行");
}
@PostConstruct
public void postConstruct() {
System.out.println(sortNum.getAndIncrement() + "-直接在接口实现类中定义一个方法,无需实现InitializingBean接口,添加注解@PostConstruct,在IOC容器初始化之后,执行的postConstruct()");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(sortNum.getAndIncrement() + "-实现InitializingBean接口,IOC容器初始化之后执行的afterPropertiesSet()");
}
public void destroyMethod() {
System.out.println(sortNum.getAndIncrement() + "-Spring XML配置文件中添加destroy-method属性的,在IOC容器销毁之前开始执行");
}
@Override
public void destroy() throws Exception {
System.out.println(sortNum.getAndIncrement() + "-实现DisposableBean接口,IOC容器销毁之前执行的destroy()");
}
@PreDestroy
public void preDestroy() {
System.out.println(sortNum.getAndIncrement() + "-直接在接口实现类中定义一个方法,无需实现DisposableBean接口,添加注解@PreDestroy,在IOC容器销毁之前,执行的preDestroy()");
}
@Override
public void springLifeCycle() {
System.out.println(sortNum.getAndIncrement() +"-自定义接口的接口方法实现...");
}
}
3.定义spring的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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="springLifeCycleService" class="com.roger.service.impl.SpringLifeCycleServiceImpl"
init-method="initMethod"
destroy-method="destroyMethod"></bean>
</beans>
4.定义junit测试类
package com.roger.service.impl;
import com.roger.service.SpringLifeCycleService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring.xml"})
public class SpringLifeCycleServiceImplTest {
@Resource(name = "springLifeCycleService")
private SpringLifeCycleService springLifeCycleService;
@Test
public void testSpringLifeCycle(){
springLifeCycleService.springLifeCycle();
}
}
5.测试结果
1-构造器方法开始执行.... 2-直接在接口实现类中定义一个方法,无需实现InitializingBean接口,添加注解@PostConstruct,在IOC容器初始化之后,执行的postConstruct() 3-实现InitializingBean接口,IOC容器初始化之后执行的afterPropertiesSet() 4-Spring XML配置文件中添加init-method属性的,无需实现InitializingBean接口,在IOC容器初始化之后开始执行 5-自定义接口的接口方法实现... 6-直接在接口实现类中定义一个方法,无需实现DisposableBean接口,添加注解@PreDestroy,在IOC容器销毁之前,执行的preDestroy() 7-实现DisposableBean接口,IOC容器销毁之前执行的destroy() 8-Spring XML配置文件中添加destroy-method属性的,无需实现DisposableBean接口,在IOC容器销毁之前开始执行 |