在实际开发中我们可能会需要在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配置类以及运行结果和方法一一样。
  

京公网安备 11010502036488号