Spring原理

news2024/11/27 8:29:53

目录

一、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.coloradmin.cn/o/1671176.html

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

相关文章

洗地机哪个牌子好性价比高又实惠?高性价比洗地机推荐【避坑指南】

洗地机是一种智能清洁家具,具有强大的清洁能力,可快速有效地清洁各种地面污渍,操作简便,省时省力。其一键操作功能使其易于上手,无需频繁清洗拖布和更换水,大大提高了清洁效率。部分高端洗地机还具备智能感…

家用洗地机哪款最好用?附热门洗地机品牌推荐,看完这篇不踩坑

随着技术的不断发展,现在的洗地机功能已经越来越强大了,它可以高效的扫地、拖地、不用手动清洗滚刷,甚至有些中高端型号还能边洗地边除菌,远程操控自清洁,简直就是家居清洁的小能手!那么,家用洗…

Python GraphQL服务器实现库之tartiflette使用详解

概要 Tartiflette是一个为Python编写的GraphQL服务器实现,它建立在现代异步编程库如asyncio之上,提供了高性能的GraphQL执行环境。Tartiflette专注于提供最佳的开发者体验,支持最新的GraphQL特性。 安装 安装Tartiflette相对简单,但需要依赖于一些系统级的库。 首先,需…

【MATLAB源码-第207期】基于matlab的单相光伏并网系统仿真,并网策略采用基于扰动观测法的MPPT模型和使用电压电流双闭环SPWM控制。

操作环境: MATLAB 2022a 1、算法描述 本文将重点分析光伏发电最大功率点跟踪(MPPT)技术和逆变器的并网控制技术,并在Simulink环境下建立模拟系统,以体现这些技术的应用与效果。文章结构如下:首先简介光伏…

如何在CentOS7本地搭建ONLYOFFICE办公套件结合内网穿透实现公网访问

文章目录 1. 安装Docker2. 本地安装部署ONLYOFFICE3. 安装cpolar内网穿透4. 固定OnlyOffice公网地址 本篇文章讲解如何使用Docker在本地服务器上安装ONLYOFFICE,并结合cpolar内网穿透实现公网访问。 Community Edition允许您在本地服务器上安装ONLYOFFICE文档&…

12个乒乓球,有一个次品,不知轻重,用一台无砝码天平称三次,找出次品,告知轻重?

前言 B站上看到个视频:为什么有人不认可清北的学生大多是智商高的? 然后试了下,发现我真菜 自己的思路(失败) 三次称重要获取到12个乒乓球中那个是次品,我想着将12个小球编号,分为四组,每组…

数学老师们

小学三年级之前的数学老师,包括学前班给过我零分的数学老师,模样、姓名都不记得了。能回忆起来的最早的数学老师是四、五年级的李成娥老师。 李老师四十岁左右,短发,温和、爱笑,尤其是在班主任张老师的衬托下&#xf…

等保测评技术方案(五)

(八)漏洞扫描方案 1.参与人员 乙方工程师:谭 然、张 剑等。 范围经过双方确认,此次评估的对象包括: 2.网络设备 IP 地址 设备型号 备注 / / / / / / 以现场测评实际数据为准 3.应用系统 地址 …

全球静态IP购买:全面指南与实用建议

在数字化时代,互联网连接已成为企业和个人日常运营和生活的核心。而全球静态IP地址,作为网络身份的独特标识,其重要性不言而喻。静态IP地址提供了稳定的网络连接和更高级的网络管理功能,使得远程访问、服务器托管、网络安全等应用…

MPAndroidChart 详细使用 - BarChart

chart下面的方法 getDescription().setEnabled(boolean enabled);//设置描述是否显示 setPinchZoom(boolean enabled);//设置x轴和y轴能否同时缩放。默认是否 setScaleEnabled(boolean enabled);//是否支持缩放 setScaleXEnabled(boolean enabled);//启用/禁用x轴上的缩放 setS…

Stable Diffusion WebUI 绘画

配置环境介绍​ 目前平台集成了 Stable Diffusion WebUI 的官方镜像,该镜像中整合如下资源: GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本:v1.7.0 Python版本:3.1…

C# 中的 JPG 二维码阅读器 - 在线条码扫描仪

让我们为业务应用程序开发一个JPG QR 码读取器模块,以自动执行 QR 码检测和读取。这种自动化将为您的应用程序带来生产力方面的竞争优势。此外,这篇博文将介绍一种基于网络的在线条码扫描仪,用于在线扫描条码。Aspose.BarCode提供多种编程语言…

JAVA智慧工地管理系统源码,智慧工地扬如何实现对工地扬尘的实时监测

智慧工地扬尘监测系统概述 智慧工地扬尘监测系统是一种利用现代信息技术,如光电传感技术和无线传输技术,对工地扬尘污染进行实时监测和管理的高效工具。该系统的目的是为了保护环境,减少因建筑施工产生的扬尘对周边地区的影响,同…

探索国外静态IP:跨境网络的基石

在数字化时代,互联网已经成为我们生活和工作的重要部分。无论是远程办公、在线教育还是跨境电商,稳定的网络连接都至关重要。而在这个过程中,国外静态IP以其独特的优势,成为了许多企业和个人用户的选择。 一、国外静态IP的应用场景…

【spring】application.yml导入额外配置文件

有时候application.yml 已经配置很多配置已经很大很乱了想把他们拆出去放在一个独立的XX.yml文件管理。这时候就用到了 spring.config.import 属性。 spring.config.import spring.config.import 是 Spring Boot 2.4 版本引入的一个配置属性,用于导入额外的配置数…

(动画详解)LeetCode232.用栈实现队列

💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到动画详解LeetCode算法系列 用通俗易懂的动画让算法题不再神秘 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成…

GitHub 星标高达9k star,这款高颜值的JSON可视化工具,我滴个妈呀,太惊艳了

闲言碎语太多了 所以做好自己就好啦 你把我丢下 然后告诉我好好生活 你明知道我的快乐只与你有关 你却告诉我 我自由了 一切都会变好的 比如从穷变成好穷 ​ 众所周知。json已经是程序员最常打交道的一种数据组织的方式。无论是前端还是后端,都有许多关于json的…

ohmyzsh的安装过程中失败拒绝连接问题的解决

1.打开官网Oh My Zsh - a delightful & open source framework for Zsh 在官网能看到下面的界面 有这两种自动安装的方式 个人本次选择的是: wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O - 1.打开终端输入安装的指令 sh -c "$(wget…

【论文阅读】Machine Learning, Linear Algebra, and More: Is SQL All You Need?

文章目录 摘要一、介绍二、SQL算法原语2.1、Variables2.2、Functions2.3、Conditions2.4、Loops2.5、Errors 三、案例研究3.1、对数据库友好的SQL映射3.2、性能结果 四、结论以及未来工作 摘要 尽管SQL在简单的分析查询中无处不在,但它很少用于更复杂的计算&#xf…

实习大学生如何在Purple Pi OH鸿蒙开发板下调试Android串口?

本文适用于Purple Pi OH在Android固件后串口的开发与使用。触觉智能的Purple Pi OH鸿蒙开源主板,是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党,极客,工程师,极大降低了开源鸿蒙开发者的入门门槛&#xff0c…