在实际开发中我们可能会需要在Bean使用前和销毁前进行某些操作,Spring对Bean的生命周期的操作提供了支持,提供如下两种方式:

(1)Java配置方式:

  在Java配置类中,使用@Bean注解显示声明Bean的时候,通过@Bean注解的initMethod和destroyMethod为Bean指定这两个阶段执行的函数。

(2)注解方式:

  利用JSR-250提供的@PostConstrust和@PreDestroy注解。@PostConstruct注解标识函数在构造函数执行完之后执行。


 

示例:

(1)java配置方式

①Bean代码


package learnspring.learnspring.initanddestroy;

/**
* @author 肖政宇
* @date 2019-09-26 10:47
* 说明:示例
*/
public class DemoBean {
public DemoBean() {
System.out.println("创建Bean");
}

public void useBean() {
System.out.println("Bean被使用");
}

public void initBean() {
System.out.println("使用Bean之前");
}

public void destroyDean() {
System.out.println("销毁Bean之前");
}
}
 

②java配置类代码

package learnspring.learnspring.initanddestroy;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* @author 肖政宇
* @date 2019-09-26 10:49
* 说明:java配置类
*/
@Configuration
public class DemoConfiguration {
@Bean(initMethod = "initBean", destroyMethod = "destroyDean")
DemoBean createBean() {
return new DemoBean();
}

public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(DemoConfiguration.class);
DemoBean demoBean = context.getBean(DemoBean.class);
demoBean.useBean();
context.close();
}
}

③运行结果

 

 

 


 

(2)注解方式:

①Bean

 



package learnspring.learnspring.initanddestroy;

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
* @author 肖政宇
* @date 2019-09-26 10:47
* 说明:示例
*/
public class DemoBean {
public DemoBean() {
System.out.println("创建Bean");
}

public void useBean() {
System.out.println("Bean被使用");
}

@PostConstruct
public void initBean() {
System.out.println("使用Bean之前");
}

@PreDestroy
public void destroyDean() {
System.out.println("销毁Bean之前");
}
}

Java配置类以及运行结果和方法一一样。