Spring的三种回调init和destroy方法的方式

Spring的三种回调init和destroy方法的方式

  • 1.实现InitializingBean和DisposableBean 接口
  • 2.声明SpringBean时指定initmthod 和 destroymethod
    • A.如果使用xml配置文件方式
    • B.如果使用java注解方式配置
  • 3.使用JSR250提供的@PostConstruct and @PreDestroy
  • 4.实现BeanPostProcessor接口
  • 5.以上两种或者三种方式同时使用
    • 5.1多种方式指定的方法名各不相同
    • 5.2 多种方式指定同一个方法

1.实现InitializingBean和DisposableBean 接口

实现InitializingBean接口重写的afterPropertiesSet方法,可以在bean初始化完成以后回调
实现DisposableBean接口重写的destroy方法,在容器移除bean的时候执行。
实现这两个接口的bean可以在bean的生命周期中自定义初始化和销毁逻辑

2.声明SpringBean时指定initmthod 和 destroymethod

A.如果使用xml配置文件方式




public class ExampleBean {
    public void init() {
        // do some initialization work
    }
    
   public void cleanup() {
        // do some destruction work (like releasing pooled connections)
    }
}

B.如果使用java注解方式配置

在@Bean注解中指定

public class BeanOne {

    public void init() {
        // initialization logic
    }
}

public class BeanTwo {

    public void cleanup() {
        // destruction logic
    }
}

@Configuration
public class AppConfig {

    @Bean(initMethod = "init")
    public BeanOne beanOne() {
        return new BeanOne();
    }

    @Bean(destroyMethod = "cleanup")
    public BeanTwo beanTwo() {
        return new BeanTwo();
    }
}

3.使用JSR250提供的@PostConstruct and @PreDestroy

一个类中只能有一个方法被@**PostConstruct **注解,表明这个方法是bean的init方法。
同样的,@PreDestroy注解表明当前方法是bean的destroy方法。
比较推荐使用这种方式来写,相对于第一种更直观,没有和spring提供的接口耦合在一起

参考文档:https://docs.spring.io/spring/docs/5.1.5.RELEASE/spring-framework-reference/core.html#beans-factory-lifecycle-initializingbean

4.实现BeanPostProcessor接口

实现postProcessBeforeInitialization和postProcessAfterInitialization方法在对象初始化前后进行增强

5.以上两种或者三种方式同时使用

5.1多种方式指定的方法名各不相同

按照以下顺序依次执行

  1. 带@PostConstruct或@Predestroy注解的方法
  2. 实现InitializingBean回调接口定义的afterPropertiesSet()方法
  3. 使用xml中init-method或@Bean注解中的initMethod指定的自定义方法

5.2 多种方式指定同一个方法

指定的这个初始化或者销毁方法只会执行一次

你可能感兴趣的:(Spring,Spring)