SpringBean的初始化与销毁

Spring初始化与销毁

初始化

初始化是指在 bean 创建之后、在将 bean 交给 Spring 容器管理之前或之后执行的一些特定操作。在 Spring 中,你可以通过 @PostConstruct 注解、XML 配置文件的 属性或 JavaConfig 中的 @Bean(initMethod) 来定义初始化方法。
时间点:初始化方法 在 bean 创建之后、在将 bean 交给 Spring 容器管理之前或之后执行。
目的:初始化方法 用于执行一些初始化逻辑,例如资源的加载、连接的建立等。
注解/配置方式:初始化方法 可以使用 @PostConstruct 注解、XML 配置文件的 属性或 JavaConfig 中的 @Bean(initMethod) 来定义。
适用场景:初始化方法 适用于需要在 bean 创建之后执行一些逻辑的场景,例如初始化资源、建立连接等。

import javax.annotation.PostConstruct;

public class MyBean {

    private String myProperty;

    @PostConstruct
    public void init() {
        // 执行初始化逻辑
        System.out.println("Initializing MyBean...");

        // 在初始化方法中可以使用已注入的属性
        System.out.println("myProperty: " + myProperty);
    }

    // Setter 方法注入
    public void setMyProperty(String myProperty) {
        this.myProperty = myProperty;
    }
}

需要注意的是初始化通常是在bean将属性注入之后发生的
BeanPostProcessor的前置与后置执行分别在此前后

    private Object initializeBean(String beanName, Object bean, BeanDefinition beanDefinition) {
        // 1. 执行 BeanPostProcessor Before 处理
        Object wrappedBean = applyBeanPostProcessorsBeforeInitialization(bean, beanName);

        // 执行 Bean 对象的初始化方法
        try {
            invokeInitMethods(beanName, wrappedBean, beanDefinition);
        } catch (Exception e) {
            throw new BeansException("Invocation of init method of bean[" + beanName + "] failed", e);
        }

        // 2. 执行 BeanPostProcessor After 处理
        wrappedBean = applyBeanPostProcessorsAfterInitialization(bean, beanName);
        return wrappedBean;
    }

销毁

使用 @PreDestroy 注解、XML 配置文件的 属性或者实现 DisposableBean 接口的 destroy 方法来定义 bean 的销毁方法。
实例

import javax.annotation.PreDestroy;

public class MyBean {

    // 其他属性和方法

    @PreDestroy
    public void cleanup() {
        // 执行销毁逻辑
        System.out.println("Bean is being destroyed...");
    }
}

推荐使用 @PreDestroy 注解或者 XML 配置文件的 属性,因为它们提供了更为清晰和声明式的方式,而实现 DisposableBean 接口更多地是一种传统的方式。

相关推荐

  1. SpringBean初始化销毁

    2023-12-29 04:48:03       57 阅读
  2. springBean三种实例化

    2023-12-29 04:48:03       42 阅读
  3. 简单上手SpringBean整个装配过程

    2023-12-29 04:48:03       30 阅读
  4. 小程序webView初始化销毁页面

    2023-12-29 04:48:03       67 阅读
  5. 巧用map实现springbean命令模式

    2023-12-29 04:48:03       61 阅读
  6. springbean加载过程以及应用场景

    2023-12-29 04:48:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-29 04:48:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-29 04:48:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-29 04:48:03       82 阅读
  4. Python语言-面向对象

    2023-12-29 04:48:03       91 阅读

热门阅读

  1. PHP之——函数的使用

    2023-12-29 04:48:03       54 阅读
  2. Redis雪崩效应是什么?

    2023-12-29 04:48:03       51 阅读
  3. 路径规划算法实现

    2023-12-29 04:48:03       55 阅读
  4. c++ 重写 重构 重载

    2023-12-29 04:48:03       45 阅读
  5. F-44 字段显示不全

    2023-12-29 04:48:03       49 阅读
  6. Python 自动程序数字炸弹游戏

    2023-12-29 04:48:03       54 阅读
  7. 【洛谷】爱与愁的心痛

    2023-12-29 04:48:03       56 阅读
  8. Python子进程内numpy.random失效

    2023-12-29 04:48:03       66 阅读
  9. python实现rtmp推流

    2023-12-29 04:48:03       66 阅读
  10. select poll epoll

    2023-12-29 04:48:03       54 阅读
  11. Linux w和who命令:查看登陆用户信息

    2023-12-29 04:48:03       61 阅读
  12. python类编写的异常

    2023-12-29 04:48:03       56 阅读