后端Web之SpringBoot原理

news2024/11/24 9:17:29

目录

1.配置优先级

2.Bean

3.SpringBoot原理


1.配置优先级

SpringBoot中支持三种格式的配置文件: .application.properties、application.yml和application. yaml。它们的配置优先级分别降低。虽然springboot支持多种格式配置文件,但是在项目开发时,推荐统一使用一种格式的配置(目前yml是主流)

另外,SpringBoot除了支持配置文件属性配置,还支持Java系统属性和命令行参数的方式进行属性配置。优先级:命令行参数>Java系统属性>其他三种配置文件。

2.Bean

获取Bean:

Bean的作用域:

Spring支持五种作用域,后三种在web环境才生效:单例是指,不管用何种方法如何调用Bean中的对象,始终都调用的是同一个对象。可以通过@Scope注解来进行配置作用域

  • 默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时) 
  • prototype的bean,每一次使用该bean的时候都会创建一个新的实例
  • 实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性

第三方Bean:

当我们引入依赖后,也想把依赖中的对象也交给IOC容器管理,就不能使用@Component注解了,因为引入的这些依赖是只读的,不可编辑。

如果要管理的bean对象来自于第三方(不是自定义的) ,是无法用@Component及衍生注解声明bean的,就需要用到@Bean注解。加上后,spring容器启动时就会自动调用此方法,将方法的返回值声明为Bean对象。

3.SpringBoot原理

springboot快捷方便的原因是提供了两个非常关键的功能:起步依赖(依赖传递)、自动配置

自动配置:

SpringBoot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。

当我们引入第三方依赖时,Springboot并不能扫描到这些依赖包,因此无法把对象给到IOC容器中。此时我们可以使用注解ComponentScan指定扫描的包,但是如果项目大了,要扫描的包就会变多,这样使用繁琐且性能低。

通常情况下,我们都采用和Springboot相同的引入方式,即使用@EnableXxxx注解

以上就是引入第三方依赖之后,加载第三方依赖中的Bean和配置类的方法。

源码分析:

springboot的启动类(也称为引导类)有一个固定的注解,这个注解是spring框架中最重要的注解,因此我们下面分析这个注解里有什么

里面有前四个元注解(修饰注解的注解,不用管)、声明配置类注解Spri.....Configuration、自动配置核心注解EnableAuto....、和包扫描注解Com...Scan。EnableAuto..就是上面封装了Import注解的注解。

引入了继承于ImportSelector的实现类,如下

实现了父类的selectImports方法,返回值封装了需要交给IOC容器管理的全类名。        

这些需要引入的全类名通常在起步依赖时都有,如下:这些都是自动配置类,都会被selectImports方法读取进行返回。因此即使我们没有配置bean对象,也可以将这些全类名中的bean对象进行注入使用

点进去这些配置类,里面实际上就是一个个的方法,这些方法的返回值再通过@Bean注解加载到IOC容器中,所以这个Bean对象在Spring启动的时候就自动有了。这就是自动配置的原理。

Conditional注解:

这些全类名中的对象,并不都会通过Bean注解交给IOC容器管理。第二个注解@Conditional...,就是按照条件装配,只有满足条件的对象才会成为Bean对象。

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

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

相关文章

视频智能分析平台LntonAIServer安防监控平台花屏检测、马赛克检测功能介绍

视频监控系统在现代社会中扮演着至关重要的角色,无论是用于安全监控、交通管理还是其他用途,视频的质量直接关系到系统的可靠性和有效性。LntonAIServer通过新增的视频质量诊断功能,包括花屏检测和马赛克检测,进一步增强了视频监控…

读书学习进阶笔记 # Datawhale X 李宏毅苹果书 AI夏令营

文章目录 🚩学习目标🚩学习内容🚩 Task1.1🎯为什么优化会失败📌因非信息梯度导致的失败 🎯局部极小值与鞍点🎯临界点及其种类🎯如何判断临界值种类📌更简便的方法来判断 …

Unity教程(十四)敌人空闲和移动的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…

MT6895(天玑8100)处理器规格参数_MTK联发科平台方案

MT6895平台 采用台积电5nm工艺,与天玑 8000 相比性能提升 20% ,搭载4 个 2.85GHz A78 核心 4 个 2.0GHz A55 核心,CPU能效比上一代提高 25% 。GPU 采用了第三代的Valhall Arm Mali-G610 MC6架构,拥有6核心,搭配天玑81…

ubuntu22.04 qemu 安装windows on arm虚拟机

ubuntu22.04 qemu 安装windows on arm虚拟机 iso: https://uupdump.net/ https://massgrave.dev/windows_arm_links vivo driver: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.262-2/ qemu sudo apt update sudo a…

Java笔试面试题AI答之JDBC(1)

文章目录 1. 什么是JDBC?2. 驱动(Driver)在JDBC中的角色?3. JDBC PreparedStatement比Statement有什么优势?1. 预编译和性能提升2. 参数化查询和安全性3. 更好的可读性和可维护性4. 支持批量操作5. 缓存机制(特定数据库环境&#…

【自考zt】【数据结构】【21.10】

【关键字】 数据元素基本单位、抽象数据类型、上三角压缩对称矩阵、排序O(n2)、不宜链表快排 循环队列入队下标、二叉链表空指针、无相连通图边数差、B树非根结点关键字 链栈无头结点 单链表前二节点和、邻接矩阵度、二叉排序树 一、单选 二、填…

WGCLOUD可以监测交换机的哪些指标数据

WGCLOUD有个模块SNMP监测,可以用于监测交换机、防火墙等设备 监测的指标包括:上行流量,下行流量,每个接口的传输速率(包括上行和下行),每个接口的状态,基本信息,温度&am…

Kafka【十一】数据一致性与高水位(HW :High Watermark)机制

【1】数据一致性 Kafka的设计目标是:高吞吐、高并发、高性能。为了做到以上三点,它必须设计成分布式的,多台机器可以同时提供读写,并且需要为数据的存储做冗余备份。 图中的主题有3个分区,每个分区有3个副本&#xf…

解决商店汽水兑换问题——利用贪心算法与循环结构

解决商店汽水兑换问题——利用贪心算法与循环结构 在某商店中,有一种特别的促销活动:三个空汽水瓶可以换一瓶汽水。而且,如果空瓶数量不足,还可以向老板借空瓶(但必须要归还)。给定初始的空瓶数量,如何计算最多可以喝到多少瓶汽水?这个问题可以通过贪心算法来高效解决…

windows手工杀毒-寻找可疑进程之线程

上篇回顾:windows手工杀毒-寻找可疑进程之进程模块-CSDN博客 上篇我们介绍了如何通过进程模块寻找可疑进程,进程模块文件按照PE格式存储,我们可以使用IDA等静态分析(不需要运行文件,只看文件内容)工…

仕考网:军队文职人员公开招考笔试考试大纲

考试方式和时限 考试方式为闭卷笔试,考试时限为120分钟。 试卷分值和试题类型 试卷满分为100分,试题类型为客观性试题。 测查内容 测查内容主要包括基本知识和岗位能力,具体内容如下。 1.基本知识 2.岗位能力 ①言语理解与表达 ②数…

redis主从+高可用切换+负载均衡

1. redis主从配置 # 在master中 cp sentinel.conf /etc/redis/ vim /etc/redis/sentinel.conf scp /etc/redis/sentinel.conf server2:/etc/redis/ scp /etc/redis/sentinel.conf server3:/etc/redis/ redis-sentinel /etc/redis/sentinel.conf # 启动监控# 在slave中 redis-s…

Java SpringBoot集成Vue.js,构建茶园茶农文化交流平台,四步实现高效互动,MySQL存储数据更稳定

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

LevelDB RockesDB LSM

LevelDB levelDB是同样也是一个Key-value数据库,但是相对于Redis、memcache来说,levelDB是基于内存-磁盘来实现的,但在大部分场景下也表现出了不逊色于Redis、Memcache的性能。levelDB由google实现并开源,轻松支持billion量级的数…

解读:以RTC为基,AI为脑的“超拟人”AI实时互动解决方案

我们打造了一款满足想象与应用的智能体——AI实时互动。 谈谈AI智能体 当AI变得足够聪明时,用户与AI的交互将变得真实自然。于是,构建高拟真AI与用户的实时交互,已经成为企业提升数智化生产力的新思路。 在这个交互过程中,存在一…

html备忘录

备忘录 网站收藏数据: 网站收藏.js const webLinks [{ title: "智能翻译", src: "https://fanyi.baidu.com" },{ title: "哔哩哔哩", src: "https://www.bilibili.com" },{ title: "百度一下,你就知道&…

图欧科技-IMYAI智能助手24年8月更新日志大汇总(含史诗级更新)

IMYAI史诗级更新 图欧君最近行程排得满满当当 但请各位小伙伴放心 我们的更新步伐从未停歇 而这次我们IMYAI主站也迎来了史诗级升级 一起来看看这个8月 我们又新增了哪些功能和优化吧~ 8.26|更新日志 模型选择界面鼠标悬停左右按钮可以自动滚动(手机端长…

在人工智能的浪潮中:AI大模型的涌现、商业变革与产品经理的应对策略

在科技日新月异的今天,人工智能(AI)作为一股不可阻挡的力量,正以前所未有的速度重塑着我们的世界。其中,AI大模型以其惊人的涌现能力和创造力,成为了这场技术革命中的璀璨明星。正如达尔文所言:…

ARM切换工作模式,异常处理

切换工作模式 处理软中断 preserve8area reset, code, readonlycode32entryb start ;resetnop ;undefb deal_swi ;swinop ;prefetch abortnop ;data abortnop ;reservednop ;irpnop ;fiq deal_swistmfd sp!,{r4-r12,lr};保护现场sub r1,lr,#4 …