几种自定义Spring生命周期的初始化和销毁方法

Bean 的生命周期指的是 Bean 的创建、初始化、销毁的过程。Spring 提供了一些方法,可以让开发自定义实现在生命周期过程中执行一些额外操作。

1、在注解 @Bean 中指定初始化和销毁时执行的方法名。

@Component
public class Cat {
  public Cat() {
    System.out.println("new Cat()");
  }
  void initMethod() {
    System.out.println("调用init初始化***** initMethod");
  }
  void destroyMethod() {
    System.out.println("调用destroy销毁***** destroyMethod");
  }
}
@Component
public class LifeCylceConfig {
  @Bean(initMethod = "initMethod", destroyMethod = "destroyMethod")
  Cat cat() {
    return new Cat();
  }
}

2、实现初始化和销毁接口 InitializingBean、DisposableBean

@Component
public class Cat implements InitializingBean, DisposableBean {
  @Override
  public void afterPropertiesSet() throws Exception {
    System.out.println("调用初始化----- afterPropertiesSet");
  }
  @Override
  public void destroy() throws Exception {
    System.out.println("调用销毁----- destroy");
  }
}

3、使用注解 @PostConstruct、@PreDestroy 标注初始化和销毁时需要执行的方法。

@Component
public class Cat {
  @PostConstruct
  void postConstruct() {
    System.out.println("调用注解的初始化===== postConstruct");
  }
  @PreDestroy
  void preDestroy() {
    System.out.println("调用注解的销毁===== destroy");
  }
}

4、实现接口 BeanPostProcessor,来在 Bean 初始化完成前后执行操作。

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
  @Override
  public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    System.out.println("调用实例化前的后置处理器###### postProcessBeforeInitialization:"+beanName);
    return bean;
  }
  @Override
  public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    System.out.println("调用实例化后的后置处理器###### postProcessAfterInitialization:"+beanName);
    return bean;
  }
}

需要注意的是BeanPostProcessor.postProcessAfterInitialization()并非关闭容器时才执行的销毁方法,它在完成初始化 Bean 之后就会执行。

上面4种方式在启动容器和关闭容器时的执行顺序如下

  1. 初始化构造器 new Cat()
  2. BeanPostProcessor.postProcessBeforeInitialization()
  3. @PostConstruct
  4. InitializingBean.afterPropertiesSet()
  5. initMethod()
  6. BeanPostProcessor.postProcessAfterInitialization()
    =====================开始关闭容器=====================
  7. @PreDestroy
  8. DisposableBean.destroy()
  9. destroyMethod()

原文地址:https://www.cnblogs.com/bigshark/p/11296917.html

时间: 2024-10-30 13:59:44

几种自定义Spring生命周期的初始化和销毁方法的相关文章

Spring学习笔记之初始化和销毁方法的调用次序

Multiple lifecycle mechanisms configured for the same bean, with different initialization methods, are called as follows: Methods annotated with @PostConstruct    afterPropertiesSet() as defined by the InitializingBean callback interface     A custom

JSP 自定义标签 生命周期

1. 2. JSP 自定义标签 生命周期,布布扣,bubuko.com

Hibernate学习之三种状态及生命周期(图)

三种状态: 生命周期: 代码表示: //三种状态     public void testThreeState(){         TUser user=new TUser();         user.setName("spark");  //此时user处于Transient                  try {             Transaction tx=session.beginTransaction();             session.save

(002)spring容器中bean初始化、销毁时执行的方法及其3种实现方式

spring容器中bean初始化或者销毁时会执行一些方法,有3种实现方式. 1.实现InitializingBean.DisposableBean接口,在bean的属性设置后和bean销毁时分别执行afterPropertiesSet和destroy方法 pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/

玩转Spring生命周期之Lifecycle

要与容器的bean生命周期管理交互,即容器在启动后和容器在销毁前对每个bean执行操作,有如下三种方法: 1.实现Spring框架的InitializingBean和DisposableBean接口.容器为前者调用afterPropertiesSet()方法,为后者调用destroy()方法,以允许bean在初始化和销毁bean时执行某些操作. public class HelloLifeCycle implements InitializingBean, DisposableBean { pu

tomcat系列分析之生命周期管理初始化动作

tomcat中有很多组件,要对这些组件进行生命周期的管理非常困难,tomcat中采用的是抽象出一个生命周期管理接口,然后所有的组件都实现该接口,当父组件启动时,同事负责将子组件启动起来,从而完成整tomcat的初始.启动.结束等动作. 来看下tomcat启动的过程,首先构造Bootstrap类,调用其中的init方法,完成类加载器的初始化,方便后面加载类使用,然后调用其中的load方法,实际上tomcat真正的启动动作是由Catalina类完成的.而这其中在BootStrap中调用Catalin

Spring中Bean初始化和销毁方法的几种配置方式

在Bean的生命周期中,Spring可以设置在Bean初始化之后以及在销毁之前要执行的方法. 主要设置方式有以下几种: 通过实现InitializingBean/DisposableBean 接口并重写afterPropertiesSet()/destroy()方法: 通过<bean> 标签的 init-method/destroy-method属性指定: 通过在指定方法上加@PostConstruct或@PreDestroy注解来指定: 通过<beans>标签的 default-

视图控制器生命周期中各个重要的方法(Swift) (Important Methods during the Lifecycle of a View Controller)

1. init(coder:) 它是视图控制器从故事板创建实例的默认初始化函数.(It is the initializer for UIViewController instances created from a storyboard.) 它在整个生命周期中只被调用1次. 2. init(nibName:bundle:) 它是视图控制器的指定初始化函数. (It is the designated initializer for UIViewController.) 当视图控制器的实例不是通

Spring中Bean初始化及销毁方法(InitializingBean接口、DisposableBean接口、@PostConstruct注解、@PreDestroy注解、以及init-method方法和destroy-method方法)

一. 在Spring中Bean的初始化后以及销毁前的回调方式有: init-method:是指创建bean时调用的方法,注意,不是创建bean的方法. destroy-method:是指销毁bean时调用的方法,同样,不是销毁bean的方法. @PostConstruct注解:在bean实例化和注入后,进行初始化 @PreDestroy:在bean销毁前回调 InitializingBean接口: 查看InitializingBean接口的源码可以发现,只有一个方法,需要pojo继承Initia