【Spring】2.Spring中Bean的生命周期管理及定义

在Spring框架中,Bean是一个被Spring IoC容器实例化、组装和管理的对象。Bean就是Spring应用中的对象,它们形成了Spring应用的骨干。Spring IoC容器负责创建Bean,配置Bean以及管理Bean的完整生命周期。

Bean的生命周期

  1. 实例化Bean:Spring IoC容器首先创建了Bean的实例。
  2. 设置Bean的属性:然后,Spring会根据配置文件设置Bean的属性。
  3. 调用Bean的初始化方法:如果Bean实现了InitializingBean接口,Spring会调用它的afterPropertiesSet方法。如果在Bean配置文件中通过init-method属性指定了初始化方法,那么Spring会调用它。
  4. Bean可以被应用使用了。
  5. 当容器关闭时,如果Bean实现了DisposableBean接口,Spring会调用它的destroy方法。如果在Bean配置文件中通过destroy-method属性指定了销毁方法,那么Spring会调用它。

流程图如下:

                    开始|实例化Bean|设置Bean属性|调用初始化方法|Bean可用|调用销毁方法|结束

Bean定义

在Spring框架中,可以通过XML配置文件或者注解来定义一个Spring Bean。

1. 通过XML配置文件定义Bean:

<bean id="beanID" class="com.example.BeanClass"><!-- 配置属性 --><property name="propertyName" value="propertyValue" />
</bean>

2. 通过注解定义Bean:

在类上使用@Component,@Service,@Repository,或@Controller注解可以将类定义为Bean。Spring会自动扫描这些注解,并创建对应的Bean实例。

@Component
public class BeanClass {//...
}

注:使用注解定义Bean需要在Spring的配置文件中开启注解扫描。

<context:component-scan base-package="com.example" />

Bean生命周期的管理

Spring Bean的生命周期由Spring IoC容器管理。Bean的创建、初始化、装配和销毁都是在容器中完成的。以下是几种管理Spring Bean的生命周期的方法:

1.实现InitializingBeanDisposableBean接口:当Bean实现InitializingBean接口并且配置在Spring IoC容器中,容器在设置Bean的所有属性后,会调用Bean的afterPropertiesSet方法,作为初始化回调函数。同样,如果Bean实现了DisposableBean接口,Spring IoC容器在销毁Bean时,会调用Bean的destroy方法。

public class ExampleBean implements InitializingBean, DisposableBean {//...public void afterPropertiesSet() {// Bean被初始化后的处理}public void destroy(){// Bean被销毁前的处理}
}

2.使用@PostConstruct@PreDestroy注解:这是JSR-250规范提供的注解,Spring支持这些注解。@PostConstruct注解的方法会在Bean初始化完成后被调用,@PreDestroy注解的方法会在Bean销毁前被调用。

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;public class ExampleBean {//...@PostConstructpublic void init() {// Bean被初始化后的处理}@PreDestroypublic void cleanup() {// Bean被销毁前的处理}
}

注意,使用这些注解需要在Spring的配置文件中开启注解支持。

Bean的作用域

在Spring框架中,Bean的作用域决定了Bean实例的生命周期和可见性范围。Spring支持以下几种作用域:

  1. Singleton(单例):这是Spring的默认作用域。对于每个Spring IoC容器,一个Bean定义只有一个实例。无论何时,如果要求容器返回特定名称的Bean,它都将返回同一个Bean实例。
  2. Prototype(原型):对于原型作用域,每请求一个Bean,就会创建一个新的Bean实例。
  3. Request(请求):每一次HTTP请求都会产生一个新的Bean,该Bean在当前HTTP请求内有效(仅适用于WebApplicationContext环境)。
  4. Session(会话):同一个HTTP Session共享一个Bean,不同的HTTP Session使用不同的Bean(仅适用于WebApplicationContext环境)。
  5. Application(应用):对于一个单一的ServletContext,每个Bean定义对应一个实例。Bean的生命周期与ServletContext的生命周期相同(仅适用于WebApplicationContext环境)。

在定义Bean时,可以通过scope属性来指定Bean的作用域。例如,要定义一个原型作用域的Bean,可以这样做:

<bean id="beanID" class="com.example.BeanClass" scope="prototype"><!-- 配置属性 --><property name="propertyName" value="propertyValue" />
</bean>

总结

Spring框架中的Bean是构成应用核心的对象,由IoC容器负责其生命周期管理。Bean的生命周期包括实例化、属性设置、初始化、使用和销毁。开发者可以通过XML配置或注解定义Bean,并使用`InitializingBean`、`DisposableBean`接口或`@PostConstruct`、`@PreDestroy`注解来管理Bean的初始化和销毁行为。此外,Bean的作用域(如单例、原型、请求、会话、应用)决定了Bean实例的生命周期和可见性范围,可以通过XML配置中的`scope`属性进行设置。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/830360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络高效训练:优化GPU受限环境下的大规模CSV数据处理指南

最近训练模型,需要加载wifi sci data 数据量特别大,直接干爆内存,训练也特别慢,快放弃了!随后冷静下来,然后靠着多年的经验,来进行层层优化,随诞生了这篇博客。 背景介绍 机器学习模型的训练通常需要大量的数据,尤其是对于深度神经网络模型。然而,当数据集非常庞大时…

网络之路29:三层链路聚合

正文共&#xff1a;1666 字 17 图&#xff0c;预估阅读时间&#xff1a;3 分钟 目录 网络之路第一章&#xff1a;Windows系统中的网络 0、序言 1、Windows系统中的网络1.1、桌面中的网卡1.2、命令行中的网卡1.3、路由表1.4、家用路由器 网络之路第二章&#xff1a;认识企业设备…

wow_iot模块说明

wow_iot模块说明 wow_iot模块主要用于系统关联与基础接口封装库的实现&#xff0c;以供其它库文件与可执行文件调用&#xff0c;主要涉及algorith算法模块、config配置模块、database数据库模块、plugin插件模块、encode编码模块、encrypt加密模块、hash哈希模块、protocol协议…

愚安科技安全工程师面经:

1自我介绍 2讲项目经历 3“”符号&#xff08;反单引号&#xff09;在PHP语言以及SQL语言中的作用分别是什么 4Java中的反射有什么作用 5Java反序列化的基本原理 6 SSRF漏洞有什么漏洞利用思路&#xff1f; 7 利用XSS漏洞可以达到什么效果&#xff1f;有哪些防御XSS漏洞的手段/…

新质生产力实践,我用chatgpt开发网站

是的&#xff0c;我用chatgpt开发了一个网站&#xff0c;很轻松。 我之前一点不懂前端&#xff0c;也没有网站开发的代码基础&#xff0c;纯正的0基础。 从0开始到最后成品上线&#xff0c;时间总计起来大致一共花了2-3周的时间。 初始想法我是想给我公司开发一个网站&#…

【弱监督语义分割】AllSpark:从transformer中的未标记特征重生标记特征,用于半监督语义分割

AllSpark: Reborn Labeled Features from Unlabeled in Transformer for Semi-Supervised Semantic Segmentation 摘要&#xff1a; 目前最先进的方法是用真实标签训练标注数据&#xff0c;用伪标签训练未标注数据。然而&#xff0c;这两个训练流程是分开的&#xff0c;这就使…

mybatis - XxxMapper.java接口中方法的参数 和 返回值类型,怎样在 XxxMapper.xml 中配置的问题

这个例子中的mybatis-config.xml文件&#xff0c;引用这个文件即可 实体类src/main/java/com.atguigu.pojo/Employee.java package com.atguigu.pojo;public class Employee {private Integer id;private String name;private String plone;public Integer getId() {return i…

Android数据恢复:如何在手机上恢复丢失的文件和照片

我们都有 我们错误地从手机中删除重要内容的时刻。确实如此 不一定是我们的错。其他人可以对您的手机数据执行此操作 有意或无意。这在某个时间点发生在我们所有人身上。 但是&#xff0c;今天市场上有各种各样的软件可以 帮助恢复已删除的文件。这些类型的软件被归类为数据恢复…

OceanBase 分布式数据库【信创/国产化】- OceanBase 数据库整体架构

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 数据库整体架构前言OceanBase 数据更新架构OceanBase 数据库采用 Shared-Nothing 架构OceanBase 分布式数据库【信创/国产化】- OceanBase 数据库整体架构 编辑 | 简简单单 Online zuozuo 地址…

linux 修改hosts文件新增域名映射

1、 切换到root账号 su - root 2、 输入root密码 xxxxxx 3、 进入hosts文件 vi /etc/hosts 4、 输入i进入新增模式 i 5、写入新的 127.0.0.1 rm-8123456789k7x6zr6.mysql.sss 6、保存退出 按下esc &#xff08;确保你在命令模式&#xff1a;按下Esc键确保你处于正…

Pandas数据可视化 - Matplotlib、Seaborn、Pandas Plot、Plotly

可视化工具介绍 让我们一起探讨Matplotlib、Seaborn、Pandas Plot和Plotly这四个数据可视化库的优缺点以及各自的适用场景。这有助于你根据不同的需求选择合适的工具。 1. Matplotlib 优点: 功能强大&#xff1a;几乎可以用于绘制任何静态、动画和交互式图表。高度可定制&a…

机器学习-- 爬虫IntelliScraper 重大更新说明

IntelliScraper &#x1f577;️ 地址&#xff1a;IntelliScraper 介绍 &#x1f31f; IntelliScraper 是一个高级的Python网络抓取项目&#xff0c;专为精确解析HTML内容和特征匹配而设计&#xff0c;用于从特定网页提取关键信息。该项目利用了如BeautifulSoup和scikit-le…

用OpenCV先去除边框线,以提升OCR准确率

在OpenCV的魔力下&#xff0c;我们如魔法师般巧妙地抹去表格的边框线&#xff0c;让文字如诗如画地跃然纸上。 首先&#xff0c;我们挥动魔杖&#xff0c;将五彩斑斓的图像转化为单一的灰度世界&#xff0c;如同将一幅绚丽的油画化为水墨画&#xff0c;通过cv2.cvtColor()函数的…

寝室快修|基于SprinBoot+vue的贵工程寝室快修小程序(源码+数据库+文档)

贵工程寝室快修目录 目录 基于SprinBootvue的贵工程寝室快修小程序 一、前言 二、系统设计 三、系统功能设计 1学生信息管理 2 在线报修管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&a…

结构方程模型【SEM】:非线性、非正态、交互作用及分类变量分析

张老师&#xff08;研究员&#xff09;&#xff0c;长期从事R语言结构方程模型、群落生态学、保护生物学、景观生态学和生态模型方面的研究和教学工作&#xff0c;已发表了多篇论文&#xff0c;拥有丰富的科研及实践经验。 利用结构方程模型建模往往遇到很多‘特殊’情况&…

CDA一级备考策略分享

但对于很多考生来说&#xff0c;没有备考经验&#xff0c;不知道应该如何备考&#xff1f;今天&#xff0c;我来指导大家应该如何备考&#xff0c;让大家充分准备&#xff0c;拿下CDA考试。在CDA考试大纲中为新考生讲解备考经验一下。 1、数据分析概述与职业操守、数据结构 考…

Excel 批量创建sheet页

参考资料 最巧妙的Excel批量创建工作表方法 一. 需求 ⏹有如下模板&#xff0c;现想根据提供的姓名&#xff0c;批量创建sheet页&#xff0c;要求每个sheet页拥有相同的模板 二. 通过透视表&#xff0c;批量创建sheet页面 ⏹如下图所示的步骤&#xff0c;创建透视表后&#…

人工 VS AGV无人搬运机器人,AGV赋能中国智能制造

agv 机器人作为智能制造的重要抓手&#xff0c;正在渗透到各个传统行业&#xff0c;成为我国制造业转型升级的焦点。未来&#xff0c;智能AGV将不仅仅是简单的把货物搬运到指定的位置&#xff0c;而是要把5G技术、大数据、物联网、云计算等贯穿于产品的设计中&#xff0c;让智能…

《动手学深度学习(Pytorch版)》Task03:线性神经网络——4.29打卡

《动手学深度学习&#xff08;Pytorch版&#xff09;》Task03&#xff1a;线性神经网络 线性回归基本元素线性模型损失函数随机梯度下降 正态分布与平方损失 线性回归的从零开始实现读取数据集初始化模型参数定义模型定义损失函数定义优化算法训练 线性回归的简洁实现读取数据集…

帕累托森林李朝政博士受聘「天工开物开源基金会」专家顾问

导语&#xff1a; 开源铸造了当前最前沿的科技引擎。开源驱动了软件生态&#xff0c;也以指数级速度驱动硬件生态。 3月中旬&#xff0c;天工开物开源基金会授予李朝政博士专家顾问&#xff0c;表彰他积极推动参与中国智能软件生态的建设&#xff0c;期待一起共筑未来新生态。…