“Spring管理JavaBean的过程及Bean的生命周期“
目录
- 引言
- 1.弹簧容器
- 2. Bean的生命周期
- 2.1 配置javaBean
- 2.2. 解析Bean的定义
- 2.3 检查是否需要添加自己的功能
- 2.4 初始化
- 2.5 实现Aware接口
- 2.6 扩展
- 2.7. 销毁
- 3. 单例模式和原型模式
- 3.1. 单例模式
- 3.2. 原型模式
- 4. 总结
引言
Spring框架是一个非常流行的Java应用程序框架,它提供了一种简单而强大的方式来管理JavaBean。在本文中,我们将深入探讨Spring管理JavaBean的过程,并重点关注Bean的生命周期。此外,我们还将介绍Spring中的单例模式和原型模式,以及它们在JavaBean管理中的应用。
1.弹簧容器
Spring框架通过一个称为Spring容器的核心组件来管理JavaBean。Spring容器负责创建、配置和管理JavaBean,使得开发人员能够更加专注于业务逻辑的实现。JavaBean是符合一定规范的普通Java类,它通常具有私有的成员变量、公共的getter和setter方法,以及一个无参的构造方法。
2. Bean的生命周期
在Spring管理JavaBean的过程中,每个Bean都有一个生命周期,包括以下几个阶段:
2.1 配置javaBean
通过XML、Java annotation(注解)以及Java Configuration(配置类)等方式加载Spring Bean
2.2. 解析Bean的定义
在Spring容器启动过程中,会将Bean解析成Spring内部的BeanDefinition结构;
理解为:将spring.xml中的标签转换成BeanDefinition结构
有点类似于XML解析
2.3 检查是否需要添加自己的功能
触发BeanDefinitionReader,javaBean初始化之前执行自己的业务
2.4 初始化
在初始化阶段,Spring容器会调用Bean的初始化方法。这可以通过在Bean类中定义一个带有@PostConstruct注解的方法来实现。在初始化方法中,可以进行一些必要的初始化操作,例如建立数据库连接、加载配置文件等。
spring中beanFactory,会通过List集合遍历初始化所有的javabean对象
2.5 实现Aware接口
如果自己的JavaBean需要调动spring上下文中的资源,需要实现*Aware感知接口
2.6 扩展
如果自己的JavaBean已经初始化好了,还需要扩展功能,需要借助BeanPostProcessor来实现
2.7. 销毁
在销毁阶段,Spring容器会调用Bean的销毁方法。这可以通过在Bean类中定义一个带有@PreDestroy注解的方法来实现。在销毁方法中,可以进行一些必要的清理操作,例如关闭数据库连接、释放资源等。
3. 单例模式和原型模式
在Spring的JavaBean管理中,可以使用单例模式或原型模式来管理Bean的生命周期。
默认是单例模式的,但是可以配置多例模式(原型模式)
3.1. 单例模式
单例模式表示在整个应用程序中只创建一个Bean实例。这意味着每次请求都会返回同一个Bean实例。在Spring中,默认情况下,Bean是以单例模式进行管理的。
- 优点:节约内存
- 缺点:变量污染
- javaBean是跟着spring上下文初始化的:容器生对象生,容器死,对象死
3.2. 原型模式
原型模式表示每次请求都会创建一个新的Bean实例。这意味着每次请求都会返回一个新的Bean实例。在Spring中,可以通过在Bean的定义上添加@Scope(“prototype”)注解来实现原型模式。
- 优点:无变量污染
- 缺点:及其消耗内存
- javaBean是使用时才会创建,销毁跟着jvm走。
4. 总结
通过本文的介绍,我们深入了解了Spring管理JavaBean的过程,并详细讨论了Bean的生命周期。我们了解了Bean的实例化、属性赋值、初始化、使用和销毁等阶段。此外,我们还介绍了Spring中的单例模式和原型模式,并解释了它们在JavaBean管理中的应用。
通过合理配置和使用Spring框架,我们能够更加灵活地组织和管理应用程序的组件,提高开发效率和代码质量。希望本文对您理解Spring管理JavaBean的过程以及Bean的生命周期有所帮助。谢谢阅读!
相关文章:

“Spring管理JavaBean的过程及Bean的生命周期“
目录 引言1.弹簧容器2. Bean的生命周期2.1 配置javaBean2.2. 解析Bean的定义2.3 检查是否需要添加自己的功能2.4 初始化2.5 实现Aware接口2.6 扩展2.7. 销毁 3. 单例模式和原型模式3.1. 单例模式3.2. 原型模式 4. 总结 引言 Spring框架是一个非常流行的Java应用程序框架&#…...

@mouseover不起作用,并没有触发
我的错误代码如下: <el-rowv-for"version in item.version_list":key"version.id":class"{ blue-background: versionItem.id version.id }"mouseover.native"version.isHovered true"mouseleave.native"version…...
Vue 2 组件注册
组件名的命名规则 定义组件名的两种方式: 短横线分隔命名,Kebab Case,例如my-component-name。单词首字母大写命名,Pascal Case,例如MyComponentName。 第一种方式在模板中使用<my-component-name>引用该元素…...
学习游戏开发引擎,打造梦想中的虚拟世界!
游戏开发引擎是游戏开发过程中的关键工具,它们提供了开发者所需的各种功能和资源,加速了游戏的制作过程。以下是一些常用的游戏开发引擎以及它们的优势: Unity(Unity3D): 优势: Unity 是目前最…...

AI搜索引擎助力科学家创新
开发者希望通过帮助科学家从大量文献中发现联系从而解放科学家,让他们专注于发现和创新。 图片来源:The Project Twins 对于专注于历史的研究者Mushtaq Bilal来说,他在未来科技中投入了大量时间。 Bilal在丹麦南部大学( Universit…...
神经网络基础-神经网络补充概念-50-学习率衰减
概念 学习率衰减(Learning Rate Decay)是一种优化算法,在训练深度学习模型时逐渐减小学习率,以便在训练的后期更加稳定地收敛到最优解。学习率衰减可以帮助在训练初期更快地靠近最优解,而在接近最优解时减小学习率可以…...
android.system.ErrnoException: open failed: EPERM (Operation not permitted)
android 10(Q)开始增加了沙盒机制,不能直接把文件保存到/sdcard目录下,只能保存到APP专属目录下;AndroidManifest.xml在标签下增加属性【android:requestLegacyExternalStorage“true”】可以暂时保存到/sdcard路径下,但是Android…...

基于 KubeSphere 的应用容器化在智能网联汽车领域的实践
公司简介 某国家级智能网联汽车研究中心成立于 2018 年,是担当产业发展咨询与建议、共性技术研发中心、创新成果转化的国家级创新平台,旨在提高我国在智能网联汽车及相关产业在全球价值链中的地位。 目前着力建设基于大数据与云计算的智能汽车云端运营…...

面试之ReentrantLock
一,ReentrantLock 1.ReentrantLock是什么? ReentrantLock实现了Lock接口,是一个可重入且独占式的锁,和Synchronized关键字类似,不过ReentrantLock更灵活,更强大,增加了轮询、超时、中断、公平锁…...
系统学习Linux-MongoDB
概述 mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。是nosql数据库中功能最丰富,最像关系数据库的。数据库格式为BSON 相关概念实例:系统上运行的mongodb的进程,类似于mysql实例;库:每个数…...
【带着学Pytorch】2、张量(Tensor)的介绍与创建
一、Tensor介绍 1.1、 张量是什么? 最开始在出现CPU和GPU, GPU出现主要解决的问题时并行计算,在此基础上的软件层面的工作基本上围绕着并行计算进行的,张量也不例外。 首先,我们先来聊聊 编程语言,python,java ,C,C++等,他们都有的共同特点是什么?在大学中计算机类…...

UniApp 制作高德地图插件
1、下载Uni插件项目 在Uni官网下载Uni插件项目,并参考官网插件项目创建插件项目. 开发者须知 | uni小程序SDK 如果下载下来项目运行不了可以参考下面链接进行处理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官网下载对应SD…...
C# 图像处理之灰色图转化为RGB图像
咨询通义千问的“C# 图像处理之灰色图转化为RGB图像”结果,看看如何: 在C#中,可以使用Image类来处理图像。要将灰色图像转换为RGB图像,可以按照以下步骤进行操作: 1.创建一个灰色图像对象。 Image grayImage Imag…...

从零实战SLAM-第八课(非特征点的视觉里程计)
在七月算法报的班,老师讲的蛮好。好记性不如烂笔头,关键内容还是记录一下吧,课程入口,感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…...

Azure使用CLI创建VM
使用CLI创建VM之前,确保资源中的IP资源已经释放掉了,避免创建的过程中没有可以利用的公共IP地址打开 cloudshell ,并输入创建CLI的命令如下,-n指定名称,-g指定资源组,image指定镜像,admin-usernam指定用户名…...
Rust: 聊聊AtomicPtr<()>和 *const ()
在Bytes库在github源码(https://docs.rs/bytes/1.1.0/src/bytes/bytes.rs.html#94-100)有关Bytes的定义中, pub struct Bytes {ptr: *const u8,len: usize, // inlined "trait object"data: AtomicPtr<()>, vtable: &st…...

公网远程连接Redis数据库详解
文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 前言 洁洁的个人主页 我就问你有没有发挥࿰…...

天津报web前端培训班一定要选贵的吗?
根据这几年数据显示,IT行业飞速发展,岗位需求增多,Web前端是个很新的职业,在国内乃至国际上真正开始受到重视的时间不超过五年,Web前端开发是从网页制作演变而来,名称是有很明显的时代特性。 Web前端就业形…...
iptables学习笔记
iptables的结构: iptables由上而下,由Tables,Chains,Rules组成。 一、iptables的表tables与链chains iptables有Filter, NAT, Mangle, Raw四种内建表: 1. Filter表 Filter是iptables的默认表,它有以下…...

Express 实战(一):概览
在正式学习 Express 内容之前,我们有必要从大的方面了解一下 Node.js 。 在很长的一段时间里,JavaScript 一门编写浏览器中运行脚本的语言。不过近些年,随着互联网的发展以及技术进步,JavaScript 迎来了一个集中爆发的时代。一个…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...

Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...

VSCode 没有添加Windows右键菜单
关键字:VSCode;Windows右键菜单;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意,实际使用的时候发现 VSCode 在 Windows 菜单栏…...
Linux信号保存与处理机制详解
Linux信号的保存与处理涉及多个关键机制,以下是详细的总结: 1. 信号的保存 进程描述符(task_struct):每个进程的PCB中包含信号相关信息。 pending信号集:记录已到达但未处理的信号(未决信号&a…...