一. 点睛
在我们进行实际开发的时候,经常遇到在Bean之前使用之前或者之后做些必要的操作,Spring对Bean的生命周期的操作提供了支持。在使用Java配置和注解配置下提供如下两种方式:
1. Java配置方式:使用
@Bean
的initMethod
和destroyMethod
(相当于xml配置的init-method
和destory-method
)。
2. 注解方式:利用JSR-250的@PostConstruct
和@PreDestroy
二. 示例
1. 增加JSR250支持
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
2. 使用@Bean形式的Bean
package org.light4j.sping4.usually.prepost;
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");
}
}
3.使用JSR250形式的Bean
package org.light4j.sping4.usually.prepost;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
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");
}
}
代码解释:
①
@PostConstruct
,在构造函数执行完之后执行。
②@PreDestroy
,在Bean销毁之前执行。
4. 配置类
package org.light4j.sping4.usually.prepost;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@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();
}
}
代码解释:
①
initMethod
和destroyMethod
指定BeanWayService
类的init
和destroy
方法在构造函数之后,Bean销毁之前执行。
5.运行
package org.light4j.sping4.usually.prepost;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PrePostConfig.class);
BeanWayService beanWayService = context.getBean(BeanWayService.class);
JSR250WayService jsr250WayService = context.getBean(JSR250WayService.class);
context.close();
}
}
运行结果如下图所示:
6. 源代码示例:
公众号ID:longjiazuoA

未经允许不得转载:人生设计师 » Spring4.x常用配置(三):Bean的初始化和销毁