一、点睛
在我们实际开发的时候我们经常会遇到在Bean的使用之前和使用之后做一些必要的操作,Spring对Bean的声明周期提供了支持,在使用Java配置和注解配置下提供了如下两种方式:
(1)、Java配置方式:使用@Bean的initMethod和destroyMethod(相当于xml配置的init-method和destroy-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
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-destroy-method")
}
}
(3)使用JSR-250形式的Bean
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-destroy-method")
}
}
代码解释:
1、@PostConstruct在构造函数执行完之后执行。
2、@PreDestroy,在Bean销毁之前执行。
(4)配置类
@Configuration
@ComponentScan("")//需要扫面的包
public class PrePostConfig{
@Bean(initMethod="init",destroyMethod="destroy")//initMethod和destroyMethod指定BeanWayService类的init和destroy方法在构造方法之后、Bean销毁之前执行。
BeanWayService beanWayService(){
return new BeanWayService();
}
@Bean
JSR250WayService jsr250Service(){
return new JSR250WayService();
}
}
(5)运行
public class Main{
public static void main(String[] args){
AnnotationConfigApplicationContext context= new AnnotationConfigApplicationContext(PrePostConfig.class)
在我们实际开发的时候我们经常会遇到在Bean的使用之前和使用之后做一些必要的操作,Spring对Bean的声明周期提供了支持,在使用Java配置和注解配置下提供了如下两种方式:
(1)、Java配置方式:使用@Bean的initMethod和destroyMethod(相当于xml配置的init-method和destroy-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
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-destroy-method")
}
}
(3)使用JSR-250形式的Bean
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-destroy-method")
}
}
代码解释:
1、@PostConstruct在构造函数执行完之后执行。
2、@PreDestroy,在Bean销毁之前执行。
(4)配置类
@Configuration
@ComponentScan("")//需要扫面的包
public class PrePostConfig{
@Bean(initMethod="init",destroyMethod="destroy")//initMethod和destroyMethod指定BeanWayService类的init和destroy方法在构造方法之后、Bean销毁之前执行。
BeanWayService beanWayService(){
return new BeanWayService();
}
@Bean
JSR250WayService jsr250Service(){
return new JSR250WayService();
}
}
(5)运行
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();
}
}
结果:
初始化构造函数-BeanWayService
@Bean-init-method
初始化构造函数-JSR250WayService
jsr250-init-method
jsr250-destroy-method
@Bean-destroy-method
context.close();
}
}
结果:
初始化构造函数-BeanWayService
@Bean-init-method
初始化构造函数-JSR250WayService
jsr250-init-method
jsr250-destroy-method
@Bean-destroy-method