当前位置: 首页 > news >正文

【推荐】深入浅出benan的生命周期

目录

1.spring 管理JavaBean的过程(生命周期)

2.spring的JavaBean管理中单例模式及原型(多例)模式

2.1 . 默认为单例,但是可以配置多例

2.2.举例论证

   2.2.1 默认单例

 2.2.2 设置多例

2.2.3单例与多例的初始化的时间点


1.spring 管理JavaBean的过程(生命周期)

      在Spring框架中,Bean的生命周期是指从它被创建、初始化,到最终被销毁的整个过程。

        需要注意的是,Bean的销毁并不是由Java的垃圾回收器自动处理的,而是由Spring容器负责管理和销毁的。

如下图就是bean的整个生命周期图,它的一个初始化过程

  •  通过XMLJava annotation(注解)以及Java Configuration(配置类),等方式配置JavaBean,现在我用的是xml配置文件的方式,BeanDefinitionReader:解析Bean的定义。在Spring容器启动过程中,会将Bean解析成Spring内部的BeanDefinition结构;理解为:将spring.xml中的<bean>标签转换成BeanDefinition结构,有点类似于XML解析。
  • BeanDefinition:包含了很多属性和方法。例如:id、class(类名)、scope、ref(依赖的bean)等等。其实就是 将bean(例如<bean>)的定义信息 存储到这个对应BeanDefinition相应的属性中,最终得到List<BeanDefinition>
  • BeanFactoryPostProcessor:是Spring容器功能的扩展接口。JavaBean初始化之前       先执行自己的业务
  • BeanFactory:bean工厂。它按照我们的要求生产我们需要的各种各样的bean。
  • Aware感知接口:在实际开发中,经常需要用到Spring容器本身的功能资源,例如:BeanNameAware、ApplicationContextAware等等,BeanDefinition 实现了 BeanNameAware、ApplicationContextAware
  • BeanPostProcessor:后置处理器。在Bean对象实例化和引入注入完毕后,
  • destory:销毁

2.spring的JavaBean管理中单例模式及原型(多例)模式

2.1 . 默认为单例,但是可以配置多例

      单例的优点:节约内存;缺点:有变量污染;JavaBean是跟着spring上下文初始化的,容器生对象生,容器死对象死,因为单例只创建一次,所以最开始的时候就创建。

       多例的优点:无变量污染;缺点:及其消耗内存;JavaBean是使用的时候才会创建,销毁跟着jvm走。

举例:假如你有两个儿子,他们两个都想要一个玩具车。

       案例一,买一个,哥哥上午玩,弟弟下午玩,但是上午哥哥玩的时候如果玩具脏了,             刮花了,那么对于弟弟而言这个玩具已经不是原有车的状态,但是给我们省钱了=====》单例

        案例二:买两个,一人一个,这样就不存在污染,各玩各的,但是我们的钱包就扁了======》多例

2.2.举例论证

                2.2.1 默认单例

        这个就是那辆车,bean对象,这里设了一个变量属性 num 来验证是不是单例,变量改变了

package com.sy.beanlife;import com.sy.ioc.service.UserService;
import com.sy.ioc.service.impl.UserServiceImp;
import com.sy.ioc.service.impl.UserServiceImpl;import java.util.List;public class ParamAction {private int age;private String name;private List<String> hobby;private int num = 1;private UserService userService=new UserServiceImp();// private UserBiz userBiz = new UserBizImpl1();public ParamAction() {super();}public ParamAction(int age, String name, List<String> hobby) {super();this.age = age;this.name = name;this.hobby = hobby;}public void execute() {// userBiz.upload();// userBiz = new UserBizImpl2();System.out.println("this.num=" + this.num++);userService = new UserServiceImpl();System.out.println(this.name);System.out.println(this.age);System.out.println(this.hobby);}
}

       再模拟方法数据,进行测试

package com.sy.beanlife;public class InstanceFactory {public void init() {System.out.println("初始化方法");}public void destroy() {System.out.println("销毁方法");}public void service() {System.out.println("业务方法");}
}

 然后,进行xml文件配置,

前台测试:是否默认为单例模式,并且变量被污染了,num值发生了变化,说明被污染了,默认为单例模式 

效果展示: 

 2.2.2 设置多例

        原代码不变,再xml配置文件中,选择多例

 前台测试结果,发现num值没有被污染 

 结果展示:

2.2.3单例与多例的初始化的时间点

        当是多例的时候,不会初始化

   而当单例的时候,会初始化

今天小编的分享就结束呐,生活总是需要不断去学习新的知识,多想想然后再去实操,持之以恒,经验和思维都会发生转变,我们要保持谦虚学习和自信的态度,各位加油!

相关文章:

【推荐】深入浅出benan的生命周期

目录 1.spring 管理JavaBean的过程&#xff08;生命周期&#xff09; 2.spring的JavaBean管理中单例模式及原型&#xff08;多例&#xff09;模式 2.1 . 默认为单例&#xff0c;但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2.2 设置多例 2.2.3单例与多例的初始化的时…...

mysql使用redis+canal实现缓存一致性

目录 一、开启binlog日志 1.首先查看是否开启了binlog 2、开启binlog日志&#xff0c;并重启mysql服务 二、授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限 三、下载配置canal 1、下载 canal, 访问 release 页面 , 选择需要的包下载, 如以 1.0.17 版本为例 2、 …...

9.利用matlab完成 泰勒级数展开 和 符号表达式傅里叶变换和反变换 (matlab程序)

1.简述 matlab之傅里叶变换和逆变换 首先生成一个方波&#xff08;或者其他组合波形&#xff09;&#xff0c;然后对这个信号做傅里叶变换&#xff0c;拆解到频域&#xff0c;可以看到这个信号是由哪些频率的信号叠加而来。 然后把频域信号&#xff0c;用傅里叶逆变换恢复到时…...

文字点选验证码识别(上)-YOLO位置识别

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 文章中没有代码,只有过程思路,请大家谨慎订阅。…...

ssh远程连接慢解决方法

一、关闭SERVER上的GSS认证 将GSSAPIAuthentication改为no ,如果在配置文件中&#xff0c;以下值是被注释的就拿掉注释&#xff0c;因为默认开关就是yes # vi /etc/ssh/sshd_config GSSAPIAuthentication no二、关闭SERVER上DNS反向解析 在linux中&#xff0c;默认就是开启了S…...

10.4K Star!程序员为程序员针对性优化的开源免费笔记

平时我一直用Notion来记录内容为主&#xff0c;但也一直关注着其他开源产品。上周正好看到一款非常受欢迎的开源免费笔记&#xff0c;今天就推荐给大家&#xff1a;VNote。 VNote一个由程序员为程序员打造的开源笔记应用&#xff0c;基于Qt开发&#xff0c;专注于使用 Markdown…...

ppt中线材相交接的地方,如何绘画

ppt中线材相交接的地方&#xff1a; 在ppt中绘画线材相互交接的地方&#xff1a; 1.1绘图工具中的“弧形” 1.2小技巧 “弧形”工具点一下&#xff0c;在ppt中如下 1.3拖动活动点进行调整图形 1.4绘画圆弧 1.5调整“圆弧”的大小&#xff0c;鼠标放在“黄色点”位置&#xf…...

[VS/C++]如何更好的配置DLL项目中的成品输出

注意&#xff0c;解决方案与项目不放在同一个文件夹中&#xff0c;即不选中图中选项 直入主题 首先右键项目选择属性&#xff0c;或者选中项目然后AltEnter 选择配置属性下的常规 分别在四种配置中编辑输出目录如下 注意&#xff0c;四种配置要分别配置&#xff0c;一个个来…...

REC 系列 Visual Grounding with Transformers 论文阅读笔记

REC 系列 Visual Grounding with Transformers 论文阅读笔记 一、Abstract二、引言三、相关工作3.1 视觉定位3.2 视觉 Transformer 四、方法4.1 基础的视觉和文本编码器4.2 定位编码器自注意力的文本分支文本引导自注意力的视觉分支 4.3 定位解码器定位 query 自注意力编码器-解…...

Linux常用命令总结

Linux是一种自由和开放源代码的操作系统&#xff0c;它被广泛用于服务器和其他大型系统中。然而&#xff0c;如果你刚开始使用Linux&#xff0c;可能会对如何有效地操作感到困惑。这篇文章将介绍一些常用的Linux命令&#xff0c;帮助你更好地理解和使用这个强大的系统。 文件和…...

Scratch 之 制作超丝滑 FNF 推条

这个教程是不用画笔的&#xff0c;所以不用担心推条是最后一层了&#xff01; 导入素材 你以为真是这样吗&#xff1f;NO&#xff0c;NO&#xff0c;NO&#xff0c;其实是这样的 没错&#xff0c;中间是空的&#xff01;中间是空的&#xff01;中间是空的&#xff01;&#xf…...

java通过反射,动态调用指定注解的方法

SpringBootTest RunWith(SpringRunner.class) public class AnnoTest {Autowiredprivate ApplicationContext applicationContext;Testpublic void test(){// 获取有指定注解的BeanMap<String, Object> annotationMap applicationContext.getBeansWithAnnotation(CacheC…...

QT学习方法

1 .类的学习方法 第一步:从UI文件中,找到界面的类—QMainWindow第二步:在Qt Creator工具中,找到“帮助”按钮,进入到帮助菜单界面,在选择"索引",在Look for:输入类名,找到类名,双击条目中的类名,在右侧会显示出来类的详细内容第三步:在右侧,可根据内容目录…...

C++中的类型擦除技术

文章目录 一、C类型擦除Type Erasure技术1.虚函数2.模板和函数对象 二、任务队列1.基于特定类型的方式实现2.基于任意类型的方式实现 参考&#xff1a; 一、C类型擦除Type Erasure技术 C中的类型擦除&#xff08;Type Erasure&#xff09;是一种技术&#xff0c;用于隐藏具体类…...

激光雷达 01 线数

一、线数 对于 360 旋转式和一维转镜式架构的激光雷达来说&#xff0c;有几组激光收发模块&#xff0c;垂直方向上就有几条线&#xff0c;被称为线数。这种情况下&#xff0c;线数就等同于激光雷达内部激光器的数量[参考]。 通俗来讲&#xff0c;线数越高&#xff0c;激光器的…...

PHP 公交公司充电桩管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 公交公司充电桩管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码下载 https://download.csdn.net/download/qq_41221322/88220946 论文下…...

HTML <strong> 标签

定义和用法 以下元素都是短语元素。虽然这些标签定义的文本大多会呈现出特殊的样式&#xff0c;但实际上&#xff0c;这些标签都拥有确切的语义。 我们并不反对使用它们&#xff0c;但是如果您只是为了达到某种视觉效果而使用这些标签的话&#xff0c;我们建议您使用样式表&a…...

机器学习笔记 - 使用 ResNet-50 和余弦相似度的基于图像的推荐系统

一、简述 这里的代码主要是基于图像的推荐系统,该系统利用 ResNet-50 深度学习模型作为特征提取器,并采用余弦相似度来查找给定输入图像的最相似嵌入。 该系统旨在根据所提供图像的视觉内容为用户提供个性化推荐。 二、所需环境 Python 3.x tensorflow ==2.5.0 numpy==1.21.…...

Codeforces Round 881 Div.3

文章目录 贪心&#xff1a;A. Sasha and Array Coloring结论&#xff1a;B. Long Long性质&#xff1a;C. Sum in Binary Treedfs求叶子数量&#xff1a;D. Apple Tree二分与前缀和&#xff1a;E. Tracking Segments 贪心&#xff1a;A. Sasha and Array Coloring Problem - A…...

Kubernetes(K8s)从入门到精通系列之十六:linux服务器安装minikube的详细步骤

Kubernetes K8s从入门到精通系列之十六:linux服务器安装minikube的详细步骤 一、安装Docker二、创建启动minikube用户三、下载minikube四、安装minikube五、将minikube命令添加到环境变量六、启动minikube七、查看pods,自动安装kubectl八、重命名minikube kubectl --为kubect…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...