SpringBoot自动配置原理及使用流程

news/2024/5/20 5:11:12/文章来源:https://blog.csdn.net/xry12354/article/details/132780221

SpringBoot自动配置原理及使用流程

SpringBoot自动配置原理

在这里插入图片描述

具体流程

1、导入场景

以starter-web为例

  • 场景启动器导入了相关场景的所有依赖,如:starter-json,starter-tomcat,spring-webmvc

  • 每个场景启动器都引入了一个spring-boot-starter,核心场景启动器。

    在这里插入图片描述

  • 核心场景启动器引入了spring-boot-autoconfigure依赖,它的作用是自动配置Spring应用程序。

    在这里插入图片描述

2、编写主程序

使用@SpringBootApplication注解标注,说明它是一个SpringBoot项目。

  • @SpringBootApplication由三个注解组成:@SpringBootConfiguration,@EnableAutoConfiguration@ComponentScan

  • SpringBoot默认只能扫描自己主程序所在包及其子包,扫描不到spring-boot-autoconfigure包中官方写好的配置类。(在External Libraries)

    在这里插入图片描述

  • @EnableAutoConfiguration:SpringBoot开启自动配置的核心。注解内容主要包括:

    在这里插入图片描述

    • @Import(AutoConfigurationImportSelector.class)提供自动功能:批量给容器注入组件。

    • SpringBoot启动会默认加载146个配置类,这146个配置类来自于spring-boot-autoconfigure下的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

      在这里插入图片描述

    • 项目启动的时候利用@Import批量导入组件机制把autoconfigure包下的146个xxxAutoConfiguration类导入进来(自动配置类)

    • 虽然导入了146个自动配置类,但不会都生效,会按需生效,里面包含@ConditionalOnClass…(条件注解),只有在满足条件的时候才会进行下一步的操作。

      在这里插入图片描述

总结

SpringBoot的核心流程包括如下的几个步骤。

  1. 导入starter,就会导入autoconfigure
  2. autoconfigure包有META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,里面制定了所有启动要加载的自动配置类
  3. @EnableAutoConfiguration会自动的把上面文件中所有的自动配置类(xxxAutoConfiguration)导入
  4. xxxAutoConfiguration会给容器中导入一堆组件,组件都是从xxxProperties中提取属性值
  5. xxxProperties和配置文件进行绑定的

SpringBoot的使用流程

1、选场景

官方starter:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

第三方:https://mvnrepository.com/

在这里插入图片描述

2、写配置

改配置文件关键项,如数据库参数。(如下:redis的自动配置类,可以双击shift搜索这个配置类。)

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3、分析这个场景

分析这个场景给我们导入了哪些能用的组件,自动装配这些组件进行后续使用,不满意自动配置好的默认组件,则可以进行定制化处理,步骤如下:

​ 1、更改配置(可以在application.properties中进行配置)

​ 2、自定义组件

在这里插入图片描述

4、业务代码开发

通过注解以及java语法完成功能组件的开发。

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

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

相关文章

darknet识别(某验)文字点选验证码

今天介绍darknet识别文字点选验证码, Darknet is an open source neural network framework written in C and CUDA. darknet是基于yolo算法的神经网络框架。 废话少说先热热身 平台是Ubuntu20,首先要安装NVIDIA驱动 1、安装驱动 NVIDIA GeForce 驱动…

2023-09-09 LeetCode每日一题(课程表)

2023-09-09每日一题 一、题目编号 207. 课程表二、题目链接 点击跳转到题目位置 三、题目描述 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中…

[De1CTF 2019]SSRF Me | BUUCTF

根据题目名我们知道这是一道SSRF的题目 它允许攻击者在受害服务器上发起未经授权的网络请求 分析 在buuctf上有一个提示 也就是说flag在 网站的flag.txt 访问主页 很明显是段flask代码 格式化后 from flask import Flask, request # 导入Flask和request模块 import sock…

易优cms响应式月嫂家政服务公司网站模板源码—自适应手机端设计,支持后台管理

易优cms响应式月嫂家政服务公司网站模板源码 自适应手机端 带后台 模板基于EyouCMS内核制作,模板编码为UTF8 ,适合行业:家政服务类企业。 模板信息: 模板分类:摄像、婚庆、家政、保洁 适合行业:家政服务类企业 模板介绍: 本模…

【 Tkinter界面-练习04】 画板作画详细揭示

一、说明 对画布的掌握分三个部分,将图形paint到画布、动画move、鼠标画;本篇将侧重于鼠标画的功能,提起鼠标画实现,将涉及一系列组合操作才能完成,这里将一一加以介绍。 Canvas 小部件具有大量功能,我们不…

Redis优化 RDB AOF持久化

---------------------- Redis 高可用 ---------------------------------------- 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境…

baichuan2(百川2)本地部署的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

buuctf crypto 【Dangerous RSA】解题记录

1.打开文件 2.看到e非常小,c和n都很大,应该是低加密指数,上脚本 from gmpy2 import * from Crypto.Util.number import * n0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbec…

【andv】a-select 多条数据重复(搜索无效)的问题:

文章目录 一、问题:二、分析:三、解决:【1】key值用index,value用某个属性index 也可以用随机数啥的代替,反正保证数据不一致就行了 ;【2】注意:value值加了一些东西,那么在取数据的时候要记得去掉,不然取到的就不单纯…

数据链路层重点协议-以太网

以太网简介 "以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了 一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等; 以太网数据帧…

Python语义分割与街景识别(2):环境搭建

前言 本文主要用于记录我在使用python做图像识别语义分割训练集的过程,由于在这一过程中踩坑排除BUG过多,因此也希望想做这部分内容的同学们可以少走些弯路。 本文是python语义分割与街景识别的第二篇,关于环境搭建的内容。这个部分是整个流…

springBoot对接Apache POI 实现excel下载和上传

搭建springboot项目 此处可以参考 搭建最简单的SpringBoot项目_Steven-Russell的博客-CSDN博客 配置Apache POI 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version> </…

项目(智慧教室)第四部分,页面交互功能,WebServer建立与使用,

一。页面构思 1.标题栏 大标题&#xff1a;智慧教室管理系统 小标题&#xff1a;灯光&#xff0c;报警&#xff0c;风扇&#xff0c;温度&#xff0c;湿度&#xff0c;光照 2.样式设计 背景设置。字体设置&#xff08;字体大小&#xff0c;格式&#xff0c;颜色&#xff09; 3.…

202331读书笔记|《我笨拙地爱着这个世界(“外卖诗人”王计兵自选集)》——脚在泥泞,心有繁花

202331读书笔记|《我笨拙地爱着这个世界&#xff08;“外卖诗人”王计兵自选集&#xff09;》——脚在泥泞&#xff0c;心有繁花 《我笨拙地爱着这个世界&#xff08;“外卖诗人”王计兵自选集&#xff09;》作者王计兵。这是读的他的第二本书&#xff0c;比较有烟火气&#xf…

180B参数的Falcon登顶Hugging Face,vs chatGPT 最好开源大模型使用体验

文章目录 使用地址使用体验test1:简单喜好类问题test2:知识性问题test3:开放性问题test4:中文支持test5:问题时效性test6:学术问题使用地址 https://huggingface.co/spaces/tiiuae/falcon-180b-demo 使用体验 相比Falcon-7b,Falcon-180b拥有1800亿的参数量

Java 【异常】

一、认识异常 Exception 在 Java 中&#xff0c;将程序执行过程中发生的不正常行为称为异常 。 异常是异常exception&#xff0c;报错是报错error 1.算数异常 0不能作为除数&#xff0c;所以算数异常 2.空指针异常 arr不指向任何对象&#xff0c;打印不出arr的长度&#xff0c;…

第六章 图 四、图的广度优先遍历(BFS算法、广度优先生成树、广度优先生成森林)

一、实现步骤 广度优先遍历的实现步骤如下&#xff1a; 1.从图的某一个节点开始&#xff0c;将该节点标记为已经访问过的节点。 2.将该节点加入到队列中。 3.当队列非空时&#xff0c;执行以下操作&#xff1a; a. 取出队列队首节点&#xff0c;并遍历该节点与之相邻的所有…

下载Ubantu镜像文件、创建虚拟机以及ubantu安装详细教程

目录 前言 Ubantu是什么&#xff1f;它有什么作用&#xff1f; 一、Ubantu镜像文件下载步骤 1.第一步安装VMware Workstation 2.第二步下载Ubuntu的镜像文件 镜像文件下载官网网址入下&#xff1a; 二、创建虚拟机和安装Ubantu的步骤 1.打开VMware Workstation并点击创…

【C语言基础】那些你可能不知道的C语言“潜规则”

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

mysql 增量备份与恢复使用详解

目录 一、前言 二、数据备份策略 2.1 全备 2.2 增量备份 2.3 差异备份 三、mysql 增量备份概述 3.1 增量备份实现原理 3.1.1 基于日志的增量备份 3.1.2 基于时间戳的增量备份 3.2 增量备份常用实现方式 3.2.1 基于mysqldump增量备份 3.2.2 基于第三方备份工具进行增…