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

本文详细介绍Spring框架中管理Bean生命周期的五种方法,包括实现特定接口、使用XML或Java配置指定初始化和销毁方法、利用JSR250注解、实现BeanPostProcessor接口以及多种方式的结合使用。每种方法都有其适用场景,理解这些机制有助于更好地控制和优化应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.实现InitializingBean和DisposableBean 接口

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

2.声明SpringBean时指定initmthod 和 destroymethod

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

在<bean 标签中指定

<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init" destroy-method="cleanup"/>


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 多种方式指定同一个方法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值