Spring原理

目录

一、Bean作用域

1、Bean作用域概念

2、Bean的六种作用域

3、举例演示bean的几种作用域

二、Bean的生命周期

1、Bean对象的生命周期

2、演示Bean对象的生命周期

三、SpringBoot的自动配置

1、概念

2、spring将对象存入容器中的原理

一、Bean作用域

在前面springIOC&DI中,我们知道交由spring管理的对象称为bean对象。

通过注解:@Component、@Service、@Configuration、@Controller、@Repository、@Bean可以将一个对象交由spring容器管理。

通过ApplicationContext来获取bean对象,根据类名.class、根据bean名称、根据bean名称+类名获取bean对象。

通过@Autowired、Setter、构造方法可以为应用程序注入所依赖的Bean对象。

详细内容可以看:springIOC&DI

1、Bean作用域概念

Bean对象的作用域是指Bean在spring框架中的行为模式。

2、Bean的六种作用域

(1)singleton---单例作用域

每个Spring IoC容器内相同名称的bean对象只有一个实例(单例模式);

(2)prototype---多例作用域

每次使用该bean时都会产生一个新的bean对象实例;

(3)request---请求作用域

每个http请求周期内会产生一个新的bean对象实例;

(4)session---会话作用域

每个http会话周期内会产生一个新的bean对象实例;

(5)Application---全局作用域

每个servletContext生命周期内会产生一个新的bean对象实例;

(6)websocket---HTTPWebSocket作用域

每个webSocket生命周期内会产生一个新的bean对象实例;

3、举例演示bean的几种作用域

(1)singleton

在容器中存储作用域为singleton的bean对象:

两次方式注入bean对象,观察两种方式地址:

两次获取同一个bean对象的结果:

获取到的对象是一样的。

(2)prototype

在容器中存储作用域为prototype的bean对象:

两次方式注入bean对象,观察两种方式地址:

两次获取同一个bean对象的结果:

两次获得的对象地址不一样。

(3)request

在容器中存储作用域为request的bean对象:

两次方式注入bean对象,观察两种方式地址:

两次获取同一个bean对象的结果:

刷新页面:

两次结果不一样。

(4)session

在容器中存储作用域为session的bean对象:

两次方式注入bean对象,观察两种方式地址:

两次获取同一个bean对象的结果:

换浏览器观察:

两次结果不一样

(5)Application

在容器中存储作用域为Application的bean对象:

两次方式注入bean对象,观察两种方式地址:

两次获取同一个bean对象的结果:

结果是一样的。

ps:singleton与Application的区别---Application是ServletContext的单例,singleton是一个ApplicationContext的单例。在一个web容器中ApplicationContext可以有多个。

二、Bean的生命周期

生命周期指一个对象从产生到销毁的过程。

1、Bean对象的生命周期

(1)实例化---为Bean对象分配内存空间

(2)属性赋值---Bean对象注入

(3)初始化---对Bean对象进行逻辑判断等初始化

(4)使用Bean

(5)销毁Bean

2、演示Bean对象的生命周期

(1)代码演示

(2)结果

三、SpringBoot的自动配置

1、概念

SpringBoot的自动配置指SpringBoot将所依赖jar包中的配置类和bean对象加载到springIoC容器中,不需要我们手动声明,简化了开发。

2、spring将对象存入容器中的原理

(1)模拟第三包--不同目录下

(2)测试注入第三包

结果:

找不到MyJar这个bean类型。

(3)原因分析

是因为第三方包和SpringBoot启动类不在同一个目录下,而将对象存储到容器中时,启动类只会扫描自己所在包及其子包,其他包不会进行扫描。

(4)解决方案

①@ComponentScan--组件扫描

该注解可以指定启动类扫描哪些包,可以指定多个。

②@Import--手打导入类到容器中

该注解可以把所需要的类导入到容器中,可以导入多个类。

(5)springBoot自动配置的方式

对于以上两种导入包到类中的方式,springBoot没有进行使用,是因为使用者必须知道第三方依赖中有哪些Bean对象或配置类,很容易漏掉其中某些。

springBoot将导包的过程交给了第三方依赖,由第三方依赖进行选择性的导包。

SpringBoot实现自动配置的核心注解为@SpringBootApplication,该注解源码:

前四个为元注解,后三个是该注解的主要核心:

@SpringBootConfiguration

该注解里有@Configuration,本质上也是标注当前类为配置类。

@ComponentScan

指定启动类扫描路径,没有指定包时,将从声明该注解类的包开始扫描,这也是为什么SpringBoot项目声明注解类必须要在启动类的目录下。

@EnableAutoConfiguration

该注解是开启自动配置。

有两个核心注解:@AutoConfigurationPackage和@Import

@AutoConfigurationPackage:导入配置类包,把启动类所在的包下面所有组件都注入到Spring容器中。

@Import:导入配置文件,即读取当前项目下所依赖jar包中两个文件里面定义的配置类,不是所有配置全部加载进来,而是根据不同条件有选择的导入配置类。

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

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

相关文章

C语言(指针)7

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

6款日常精选手机APP推荐!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.全能相机软件——无他相机 无他相机App是一款完全免费且功能全面的美颜相机软件。这款相机应用集自拍、美颜、图片编辑、风格化模板、流行贴…

springboot+vue+mybatis台球俱乐部管理系统的设计与实现+PPT+论文+讲解+售后

随着信息技术在管理上越来越深入而广泛的应用,作为一般的台球厅都会跟上时代的变化,用上计算机来代表重复性的劳动,并且给用户一种新奇的感受,实现台球俱乐部系统 在技术上已成熟。本文介绍了台球俱乐部系统 的开发全过程。通过分…

k8s v1.20二进制部署 部署 CNI 网络组件 部署 Calico

一、部署 flannel 1.1.K8S 中 Pod 网络通信 ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,相当于它们在同一台机器上一样,可以用 localhost 地址访问彼此的端口。…

InternLM-XComposer2-4KHD开拓性的4K高清视觉-语言模型

大型视觉-语言模型(LVLM)在图像字幕和视觉问答(VQA)等任务中表现出色。然而,受限于分辨率,这些模型在处理包含细微视觉内容的图像时面临挑战。 分辨率的限制严重阻碍了模型处理含有丰富细节的图像的能力。…

一个视频AI自动抠像 速度快 操作简单 - RobustVideoMattingGU

RVM的GUI版本: 一款基于Robust Video Matting(RVM)源码的图形用户界面(GUI)版本,采用先进的pyqt6框架和qdarkstyle风格设计,为视频编辑爱好者和二次创作者打造了一个功能丰富的工具箱。这款软件…

Python 全栈体系【四阶】(四十二)

第五章 深度学习 九、图像分割 3. 常用模型 3.2 U-Net(2015) 生物医学分割是图像分割重要的应用领域。U-Net是2015年发表的用于生物医学图像分割的模型,该模型简单、高效、容易理解、容易定制,能在相对较小的数据集上实现学习…

深度剖析进程概念与进程状态

文章目录 1. 前言2. 什么是进程2.1 进程概念2.2 进程描述——PCB 3. 进程的一些基本操作3.1 查看进程3.2 结束进程3.3 通过系统调用获取进程标示符3.4 通过系统调用创建子进程 4. 进程状态4.1 普适的操作系统层面4.2 具体Linux操作系统层面 5. 两种特殊的进程5.1 僵尸进程5.2 孤…

Linux中的磁盘分析工具ncdu

2024年5月14日,周二上午 概述 ncdu 是一个基于文本的用户界面磁盘使用情况分析工具。它可以在终端中快速扫描目录,并统计该目录下的文件和文件夹的磁盘使用情况,以交互友好的方式呈现给用户。 安装 在 Debian/Ubuntu 系统下,可…

算法:滑动窗口题目练习

目录 题目一:长度最小的子数组 题目二:无重复字符的最长子串 题目三:最大连续 1 的个数III 题目四:将 x 减到 0 的最小操作数 题目五:水果成篮 题目六:找到字符串中所有字母异位词 题目七&#xff1a…

Java modbus 实现RTU串口作为slave(服务端)读写数据

这里要了解下modbus的RTU和TCP 的几个名称关系: Modbus/RTU:主站 和从站 关系 Modbus/TCP:客户端和服务端关系 关系 主站主动找从站读写数据 客户端主动找服务端读写数据 所以当使用Modbus/TCP时,主站一般作为客户端&#xff…

树莓派发送指令控制FPGA板子上的流水灯程序

文章目录 前言一、树莓派简介二、整体实现步骤三、树莓派设置四、树莓派串口代码五、Verilog代码5.1 串口接收模块5.2 流水灯模块 六、quartus引脚绑定七、 运行效果总结参考 前言 ​ 本次实验的目的是通过树莓派和FPGA之间的串口通信,控制FPGA开发板上的小灯。实验…

Excel常用操作

计算支付成功率 使用公式 ROUND(B2/C2,4)*100&"%" 字符串拼接 将A1-A10的数字用英文逗号拼接 TEXTJOIN(",",TRUE,A1:A10) 将A1-A10中大于5的数字用英文逗号拼接 ARRAYFORMULA(TEXTJOIN(",",TRUE,IF(A1:A10>5,A1:A10,"")…

未来想从事营销策划类的工作,需要怎么学习?

从事营销策划类的工作,提升和学习主要从以下三个方面: 一、营销底层逻辑的搭建 二、营销系统知识的构建 三、大量营销案例的积累 营销入门,其实大多数人一直都在入门的道路上,每个人都是终身学习者。虽然从事营销工作十年多了…

2024年5月中,AITOP100平台活动专区迎来六场AI大赛盛事!

AITOP100平台的活动专区在2024年5月中旬更新的6场AI大赛来了! 随着人工智能技术的飞速发展,AI设计已经成为了创新与创意的新领域。2024年5月中旬,由腾讯研究院、剪映、站酷等互联网大厂主办的6场AI设计大赛震撼来袭,为广大AI设计…

【数据分析面试】43.寻找给小费最多的客人(Python:字典用法)

题目: 寻找给小费最多的客人 (Python) 给定两个非空列表user_ids和tips,编写一个名为most_tips的函数,用于找到给小费最多的客户。 示例: 输入: user_ids [103, 105, 105, 107, 106, 103, 102, 108, 1…

短剧看剧系统,当前互联网热门项目工具系统模板。

目录 揭秘爆款神器:短剧看剧系统,让你的内容火遍全网! 一、短剧看剧系统:一站式解决方案 二、灵活定价,实现收益最大化 三、高效管理,团队协作更轻松 四、数据驱动,精准把握市场动态 五、智…

设置linux终端用户输入空闲一段时间后就自动断开(linux终端超时自动断开)

在 /etc/profile 中加入TMOUT变量即可。 在文件的最后追加以下两行 export TMOUT600 # 600秒内无操作就断开。 readonly TMOUT # 将变量设置为只读,防止用户更改如图

企业计算机服务器中了rmallox勒索病毒怎么解密,rmallox勒索病毒解密工具流程

在当今数字化时代,越来越多的企业依赖计算机服务器进行办公开展业务,计算机服务器犹如企业的心脏,能够为企业存储许多重要的核心信息,帮助企业有效的开展各项工作业务,提高企业的生产效果,但网络是一把双刃…

springMVC基础使用(示例)

maven依赖&#xff08;javax.servlet-api版本与spring-webmvc班恩要匹配不然会报java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRespons&#xff09;&#xff1a; <dependencies><dependency><groupId>javax.servlet</groupId><arti…