我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring中Bean初始化和销毁的方法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring中Bean初始化和销毁的方法是什么

今天小编给大家分享一下Spring中Bean初始化和销毁的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Spring中支持在Bean的加载时声明初始化方法,该方法会在Bean对象完成初始化之前进行执行,可以为对象指定一些特定的行为,同样的Bean销毁时,也是支持这个动作的。其中因为对象的作用域不同,销毁的表现形式略有区别。初始化都没有区别,无论是单例、原型、request、session、global session等他们的创建时初始化都没啥区别,但是销毁会略有区别,单例模式默认不会销毁,只有在Spring容器被销毁时才会执行Bean的销毁,从而执行他的销毁方法。session、request等他们是作用范围到了就会被销毁,并不会长期存在,所以他们的销毁方法是在作用范围执行之后来调用的。

一、Bean的多种初始化方式

Spring中总共支持了三种方式对Bean进行初始化,依次是在方法上使用PostConstruct注解、实现InitializtingBean接口重写对应方法、声明init-method方法来实现,且他们三个支持并行。也就是说我们可以三个都是用,当三个都是用时就是按照下面的顺序执行的,即限制性PostConstruct注解的方法,再执行InitializingBean的方法,最终执行init-method的方法。

1.PostConstruct注解

如下所示,这里使用配置类的方式进行注入,因为一会延时init-method必须使用配置类才可以实现,启动容器当加载TestA这个Bean时,他的初始化方法就会被执行。

@Configurationpublic class TestInitmestond {    @Bean    public TestA getBeanA(){        return new TestA();    }}class TestA{    @PostConstruct    public void postConstructor(){        System.out.println("这是使用了PostConstruct注解的初始化方法");    }}

2.实现InitializingBean接口

下面是结合了第一种和第二种的初始化方式:

@Configurationpublic class TestInitmestond {    @Bean    public TestA getBeanA(){        return new TestA();    }}class TestA implements InitializingBean {    @Override    public void afterPropertiesSet() throws Exception {        System.out.println("这是实现InitializingBean的初始化方法");    }    @PostConstruct    public void postConstructor(){        System.out.println("这是使用了PostConstruct注解的初始化方法");    }}

3.声明init-method方法

init-method方法必须使用配置类进行加载Bean才可以配置,因为该属性是Bean标签的属性,在注解中也就是Bean注解的属性,所以我们使用Component等其他IOC注解时是无法指定的。

@Configurationpublic class TestInitmestond {    @Bean(initMethod = "initMethod")    public TestA getBeanA(){        return new TestA();    }}class TestA implements InitializingBean {    @Override    public void afterPropertiesSet() throws Exception {        System.out.println("这是实现InitializingBean的初始化方法");    }    @PostConstruct    public void postConstructor(){        System.out.println("这是使用了PostConstruct注解的初始化方法");    }    public void initMethod(){        System.out.println("这是使用了init-method声明的初始化方法");    }}

下面启动下容器展示下他们的执行顺序,如下:

Spring中Bean初始化和销毁的方法是什么

可以看到他们的顺序是固定的即:PostConstruct—>initializingBean—>init-method.

二、Bean的多种销毁方式

同样的Spring也支持了三种销毁的方式,且这三种销毁方式与三种创建方式是完全对应的。同时与初始化方法一样Spring也是支持三种销毁方法的并行的。且他们并行时顺序是固定的:执行PreDestroy–>DisposableBean–>destroy-method.

1.PreDestroy注解

这里容器采用手动启动的方式进行创建,然后为容器设置一个销毁的钩子,这样当容器销毁时我们就可以去执行销毁方法了,对于单例模式的销毁方法只能通过这种测试了,若是我们直接停止IDEA的服务是不会执行销毁方法的。不过对于scope不是singleton的Bean来说,比如request在正常服务里是可以体现销毁动作的。

public class TestDestroyMethod {    //手动启动容器,模拟关闭    public static void main(String[] args) {        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(TestConfig.class);        annotationConfigApplicationContext.start();        annotationConfigApplicationContext.registerShutdownHook();    }}@Configurationclass TestConfig{    @Bean    public TestB getBean(){        return new TestB();    }}class TestB{    @PreDestroy    public void preDestroy(){        System.out.println("这是使用PreDestroy注解的销毁方法");    }}

2.实现DisposableBean接口

这种就是直接实现接口重写destroy方法即可

public class TestDestroyMethod {    //手动启动容器,模拟关闭    public static void main(String[] args) {        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(TestConfig.class);        annotationConfigApplicationContext.start();        annotationConfigApplicationContext.registerShutdownHook();    }}@Configurationclass TestConfig{    @Bean    public TestB getBean(){        return new TestB();    }}class TestB implements DisposableBean {    @PreDestroy    public void preDestroy(){        System.out.println("这是使用PreDestroy注解的销毁方法");    }    @Override    public void destroy() throws Exception {        System.out.println("这是实现DisposableBean的方法");    }}

3.声明destroy-method方法

下面是结合了三种销毁方法的代码

public class TestDestroyMethod {    //手动启动容器,模拟关闭    public static void main(String[] args) {        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(TestConfig.class);        annotationConfigApplicationContext.start();        annotationConfigApplicationContext.registerShutdownHook();    }}@Configurationclass TestConfig{    @Bean(destroyMethod = "destroyMethod")    public TestB getBean(){        return new TestB();    }}class TestB implements DisposableBean {    @PreDestroy    public void preDestroy(){        System.out.println("这是使用PreDestroy注解的销毁方法");    }    @Override    public void destroy() throws Exception {        System.out.println("这是实现DisposableBean的方法");    }    public void destroyMethod(){        System.out.println("这是制定了destroy-method的销毁方法");    }}

下面是执行的截图,可以看到三种销毁方式与初始化方式一样都是有固定顺序的,事实上初始化方式与销毁方式他们是有对应关系的。PostConstruct与PreDestroy是一组,InitializingBean与DisposableBean是一组,init-method与destroy-method是一组。

Spring中Bean初始化和销毁的方法是什么

以上就是“Spring中Bean初始化和销毁的方法是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring中Bean初始化和销毁的方法是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring中Bean初始化和销毁的方法是什么

今天小编给大家分享一下Spring中Bean初始化和销毁的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Sprin
2023-07-06

Spring中Bean初始化和销毁的方式总结

这篇文章主要为大家整理了Spring中Bean初始化和销毁的多种方式,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
2023-05-16

Bean自定义初始化和销毁方法是什么

今天小编给大家分享一下Bean自定义初始化和销毁方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Bean三种自定义初
2023-06-29

spring中bean的初始化方法是什么

在Spring中,bean的初始化可以通过两种方式来完成:使用@Bean注解的initMethod属性或者实现InitializingBean接口。1. 使用@Bean注解的initMethod属性:可以在@Bean注解中通过initMet
2023-09-21

一文详解spring注解配置bean的初始化方法和销毁方法

本篇我们讲解下spring项目中如何为bean指定初始化方法和销毁方法。当spring完成bean的属性赋值之后,就会执行bean的初始化方法,而当spring要销毁bean实例的时候,也会调用bean的销毁方法。文中有详细的代码实例,需要的朋友可以参考下
2023-05-18

Spring初始化与销毁的执行顺序是什么

这篇文章主要介绍了Spring初始化与销毁的执行顺序是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring初始化与销毁的执行顺序是什么文章都会有所收获,下面我们一起来看看吧。演示 - 初始化销毁顺序/
2023-07-05

SpringBoot中的Bean初始化方法是什么

本篇内容介绍了“SpringBoot中的Bean初始化方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!注解说明使用注解: @Post
2023-06-21

spring初始化bean的过程是什么

Spring初始化Bean的过程如下:定义Bean:通过在配置文件或者注解中定义Bean的信息,包括Bean的名称、类别、属性等。加载配置文件:Spring容器会读取配置文件,解析其中的Bean定义。创建Bean实例:根据Bean定义中的类
spring初始化bean的过程是什么
2024-02-29

Spring的Bean初始化过程和生命周期是什么

本篇内容介绍了“Spring的Bean初始化过程和生命周期是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Spring创建bean的
2023-07-05

spring加载过程和初始化方法是什么

Spring加载过程分为以下几个阶段:资源定位:Spring框架会根据配置文件或注解扫描的方式,定位到配置文件或类文件的位置。资源加载:Spring框架会加载配置文件或类文件,并将其转化为内部数据结构表示。配置解析:Spring框架会解
2023-10-26

Spring容器初始化register与refresh方法是什么

这篇文章主要讲解了“Spring容器初始化register与refresh方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring容器初始化register与refresh方法是
2023-07-02

pycharm初始化的方法是什么

PyCharm的初始化方法是通过安装并打开PyCharm,在首次打开时,会出现一个“Welcome to PyCharm”界面,用户可以根据自己的需求进行配置和初始化。以下是PyCharm初始化的一般步骤:1. 下载并安装PyCharm:从
2023-09-13

linux初始化的方法是什么

Linux的初始化方法可以通过执行以下步骤来完成:1. 启动计算机并进入BIOS设置,在启动选项中选择从可引导介质(如硬盘或USB驱动器)启动。2. 安装Linux操作系统。可以选择通过光盘、USB驱动器或通过网络进行安装。根据选择的发行版
2023-08-30

c++数组初始化的方法是什么

C++中有多种方式可以初始化数组:1. 使用赋值语句逐个初始化数组元素。```cppint arr[5];arr[0] = 1;arr[1] = 2;arr[2] = 3;arr[3] = 4;arr[4] = 5;```2. 使用初始化列
2023-09-28

java初始化数组的方法是什么

Java中初始化数组有以下几种方法:1. 静态初始化:在声明数组的同时直接为数组元素赋值。```javaint[] arr = {1, 2, 3, 4, 5};```2. 动态初始化:先声明数组,然后再为数组元素赋值。```javaint[
2023-08-29

golang数组初始化的方法是什么

在Go语言中,可以使用以下方法初始化数组:1. 使用var关键字声明数组,并在声明时指定数组的长度,数组的元素会被自动初始化为对应类型的零值。```var arr [5]int // 声明一个长度为5的int类型数组,元素都被初始化为0``
2023-09-27

delphi数组初始化的方法是什么

在Delphi中,有几种初始化数组的方法:1. 手动初始化:可以通过逐个指定数组元素的值来手动初始化数组。例如:```delphivararr: array[0..2] of Integer;beginarr[0] := 1;arr[1]
2023-09-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录