在我们进行实际开发的时候,经常遇到在Bean之前使用之前或者之后做些必要的操作,Spring对Bean的生命周期的操作提供了支持。在使用Java配置和注解配置下提供如下三种方式:
1. Java配置方式:使用@Bean的initMethod和destroyMethod(相当于xml配置的init-method和destory-method):
① initMethod和destroyMethod指定BeanWayService类的init和destroy方法在构造函数之后,Bean销毁之前执行。
@Configuration
@ComponentScan("org.light4j.sping4.usually.prepost")
public class PrePostConfig {
@Bean(initMethod="init",destroyMethod="destroy") //①
BeanWayService beanWayService(){
return new BeanWayService();
}
@Bean
JSR250WayService jsr250WayService(){
return new JSR250WayService();
}
}
public class BeanWayService {
public void init(){
System.out.println("@Bean-init-method");
}
public BeanWayService() {
super();
System.out.println("初始化构造函数-BeanWayService");
}
public void destroy(){
System.out.println("@Bean-destory-method");
}
}
2. 注解方式:利用JSR-250的@PostConstruct和@PreDestroy:
① @PostConstruct,在构造函数执行完之后执行。
② @PreDestroy,在Bean销毁之前执行。
增加JSR250支持
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
public class JSR250WayService {
@PostConstruct //①
public void init(){
System.out.println("jsr250-init-method");
}
public JSR250WayService() {
super();
System.out.println("初始化构造函数-JSR250WayService");
}
@PreDestroy //②
public void destroy(){
System.out.println("jsr250-destory-method");
}
}
3.第三种是: 通过bean实现InitializingBean和 DisposableBean接口
public class DataInitializer implements InitializingBean,DisposableBean{
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet 被执行");
}
@Override
public void destroy() throws Exception {
System.out.println("destroy 被执行");
}
}