深入了解Spring中Bean的作用域和生命周期

yizhihongxing

当我们在使用Spring框架的时候,Bean是必不可少的组件之一,它们是构成应用程序的核心基础。在本篇文章中,我将会深入探讨Spring中的Bean的作用域和生命周期相关的知识点,包括不同作用域的分类以及Bean存在的生命周期,希望读者通过本篇文章可以获得对于Spring中Bean作用域和生命周期的更深入的认识。

什么是Bean的作用域?

Bean的作用域指的是Bean在Spring IoC容器中存在的范围,也就是Bean对象的创建和销毁的策略,Spring默认提供了5种作用域范围,分别是:

  • singleton(单例模式)
  • prototype(原型模式)
  • request
  • session
  • globalSession

Singleton

singleton是Spring中默认的作用域,它在整个应用中只有一个实例。Spring容器启动时创建Bean实例,对于所有请求,容器都返回同一个实例。Singleton作用域在应用程序中非常常见,尤其是只需要一个实例的情况下。在配置中使用singleton作用域可以节省资源并提高性能。

示例:

<bean id="exampleBean" class="com.example.ExampleBean" scope="singleton"/>

Prototype

prototype作用域表示每个请求都会创建新的实例。也就是说它能够保证每次调用都有一个新的Bean实例,适用于不同的应用场景,例如重量级的业务逻辑,临时状态的缓存等。

示例:

<bean id="exampleBean" class="com.example.ExampleBean" scope="prototype"/>

Request

request作用域是指当创建一个web应用程序请求时,Spring容器会为每个请求都创建一个单独的Bean实例。这种作用域的Bean适用于在web应用程序中使用。Spring容器会在每个HTTP请求到达时返回一个新的Bean实例。request作用域除了只有在web环境下才有用外,其作用与prototype作用域类似。

示例:

<bean id="exampleBean" class="com.example.ExampleBean" scope="request"/>

Session

session作用域在web环境下表示该Bean实例与HTTP会话相关联。也就是说,在同一个HTTP会话中,每次请求都返回相同的Bean实例。每当一个HTTP会话新创建时,则会创建新的Bean实例。处于session作用域下的Bean必须在web environment下的应用中使用,如果Bean是从session作用域获取但当前环境并非web的,则会有NoSuchBeanDefinitionException异常。

示例:

<bean id="exampleBean" class="com.example.ExampleBean" scope="session"/>

Global Session

全局会话作用域(global session),在一些基于portlet的web应用中使用。当portlet被渲染时,一个新的HTTP会话会被创建,如果作用域为全局会话时,则保证在整个应用中只有一个全局会话的Bean实例存在。

示例:

<bean id="exampleBean" class="com.example.ExampleBean" scope="globalSession"/>

什么是Bean的生命周期?

当一个Bean默认实例化后,它必须经历一系列的阶段,包括初始化和销毁的过程。这些阶段被称作Bean的生命周期,Spring IoC容器会负责执行这些阶段的操作。Bean的生命周期主要包括以下几个阶段:

  • 实例化
  • 属性填充
  • 初始化
  • 完成
  • 销毁

实例化

实例化是Bean的第一阶段,也就是创建Bean实例的过程。

当容器首次启动时,会依据每个Bean定义中的class属性来生成一个Bean实例。这个实例化的过程大致可以拆分为如下几步:

  1. 根据Bean定义中的class属性,使用Java反射机制创建一个对象。
  2. 根据Bean定义中的构造函数和参数,调用这个对象的一个合适的构造函数。
  3. 如果Bean定义中指定了属性setter方法,容器会根据这些setter方法为对象进行属性注入。

属性填充

属性填充阶段是指在实例化完成之后,对Bean的属性进行赋值的过程。具体来说,Spring容器会在实例化Bean之后,将Bean定义的属性或依赖注入到上下文中保存的Bean对象中。属性的填充通常发生在setter方法中。

初始化

初始化是指在构造器之后且所有属性被设置后,应用程序需要执行的一段预处理过程,主要包括以下几种方式:

  • 定义了init方法:在Bean实例化后设置Bean的一些默认值,这个方法的实现可以自定义。
  • 实现了InitializingBean接口:容器会自动回调这个Bean的afterPropertiesSet()方法,在方法中实现初始化操作。
  • 带有@PostConstruct注解的方法:这个方法会在Bean的属性被注入后立即调用。

完成

完成阶段是指Bean已经可以使用的状态。当调用getBean()方法时,Spring IoC容器会返回Bean实例对象,这个Bean状态就处于完成阶段。

销毁

在Bean实例不再被需要时,我们需要销毁Bean实例。当一个Bean销毁时,容器会回调它的一些特定方法来释放它所使用的资源,主要包括以下几种方式:

  • 定义了destory方法:在Bean实例被销毁前设置Bean的一些默认值,这个方法的实现可以自定义。
  • 实现了DisposableBean接口:容器会自动回调这个Bean的destory()方法,在方法中实现销毁操作。
  • 带有@PreDestroy注解的方法:这个方法会在Bean销毁之前调用。

总结

在这篇文章中,我们深入了解了Spring中的Bean的作用域和生命周期。通过学习不同作用域的分类以及Bean存在的生命周期,我们可以更好的理解Spring框架的核心组件Bean,掌握Bean的相关知识点并应用在各个需要的场景中,为我们的开发工作提供更多的便利,从而提高应用程序的性能优化和维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入了解Spring中Bean的作用域和生命周期 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Win10一周年更新14393.1480更新补丁KB4025339下载地址

    Win10一周年更新14393.1480更新补丁KB4025339下载地址攻略 简介 Win10一周年更新14393.1480是Windows 10操作系统的一个重要更新补丁,它修复了一些安全漏洞和系统稳定性问题。本攻略将详细介绍如何下载和安装这个更新补丁。 步骤 打开浏览器,进入微软官方网站。 在微软官方网站的搜索框中输入“Win10一周年更新14393.…

    other 2023年8月5日
    00
  • C语言构建动态数组完整实例

    C语言构建动态数组完整实例攻略 动态数组是能够自动调整大小的数组,它能够根据需要自动增加或缩小自己的大小。在C语言中,可以通过手工分配内存来构建动态数组,而我们将在这篇文章中详细介绍如何构建动态数组的完整实例。 准备工作 在开始构建动态数组之前,你需要确保已经了解并掌握了以下几个关键的概念: 内存分配函数:malloc,calloc 和 realloc 指针…

    other 2023年6月25日
    00
  • Python性能调优的十个小技巧总结

    Python性能调优的十个小技巧总结 在Python编程中,性能调优是一个重要的方面,可以提高程序的执行效率和响应速度。下面是十个小技巧,可以帮助你优化Python代码的性能。 1. 使用局部变量 在循环或函数中,尽量使用局部变量而不是全局变量。因为局部变量的访问速度更快,可以减少函数调用和内存访问的开销。 示例: def calculate_sum(num…

    other 2023年7月29日
    00
  • win10图片不显示后缀名不能直接改图片格式怎么解决

    解决Win10图片不显示后缀名不能直接改图片格式的攻略 有时候在Windows 10中,图片文件的后缀名可能不显示,这会导致无法直接改变图片的格式。下面是解决这个问题的完整攻略: 步骤一:显示文件扩展名 打开文件资源管理器(Windows资源管理器)。 在菜单栏中,点击“查看”选项卡。 在“显示/隐藏”组中,勾选“文件扩展名”选项。这样,文件的后缀名将会显示…

    other 2023年8月5日
    00
  • js获取天气

    以下是JS获取天气的完整攻略,包括基本介绍、使用方法、示例说明等内容。 1. 基本介绍 在Web开发中,我们经常需要获取天气信息。JS获取天气信息是其中的一种常见需求。通过JS获取天气信息,我们可以实现动态更新页面内容,提高用户体验。 2. 使用方法 以下是使用JS获取天气信息的基本步骤: 获取天气API。我们可以使用第三方天气API获取天气信息。常用的天气…

    other 2023年5月10日
    00
  • Forms身份认证在IE11下无法保存Cookie的问题

    问题描述: 在IE11下,通过Forms身份认证登录某个网站后,该网站返回的Cookie无法保存,导致每次刷新或关闭浏览器后都需要重新登录。 问题分析: 这个问题的根本原因在于IE11对于跨域能力(CORS)的实现。跨域的本质是在浏览器端发送一次Options请求并且在响应头中带上Access-Control-Allow-Credentials: true来…

    other 2023年6月27日
    00
  • dos命令 cd命令使用说明[图文说明]

    DOS命令cd命令使用说明 cd 命令是DOS命令中的一个基本命令,用于在DOS命令窗口中改变当前目录。在本篇文章中,我们将详细讲解 cd 命令的使用方法。 命令语法 以下是 cd 命令的语法: cd [/d] [drive:][path] cd .. cd \ 命令参数 /d: 改变驱动器时,显示当前驱动器的路径。 [drive:][path]: 指定要切…

    other 2023年6月26日
    00
  • 3.8版QQ影音更新了什么内容?附下载地址

    QQ影音3.8版更新内容攻略 QQ影音是一款功能强大的多媒体播放器,它提供了丰富的功能和优化的用户体验。最新的3.8版更新带来了一些令人兴奋的新功能和改进。以下是3.8版QQ影音的更新内容攻略: 1. 新增功能 1.1 视频下载功能 QQ影音3.8版新增了视频下载功能,使用户能够方便地下载他们喜欢的在线视频。用户只需复制视频链接,然后在QQ影音中选择下载,即…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部