SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁

😀前言
本篇博文是关于SpringBoot 依赖管理和自动配置,希望能够帮助到您😊

🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

  • SpringBoot 依赖管理和自动配置😊
    • 依赖管理💕
      • 什么是依赖管理
      • 修改自动仲裁/默认版本号
    • starter 场景启动器💕
      • starter 场景启动器基本介绍
      • 官方提供的starter
        • 介绍
      • 第三方starter
    • 自动配置💕
      • 自动配置基本介绍
      • SpringBoot 自动配置了哪些?
      • 如何修改默认配置
        • 如何修改默认扫描包结构
        • resources\application.properties 配置大全
      • 自动配置遵守按需加载原则💕
        • 基本说明
        • 实例演示
    • 😄总结

SpringBoot 依赖管理和自动配置😊

依赖管理💕

什么是依赖管理

  1. spring-boot-starter-parent 还有父项目, 声明了开发中常用的依赖的版本号

  2. 并且进行自动版本仲裁, 即如果程序员没有指定某个依赖jar 的版本,则以父项目指定的版本为准

image-20230802213548152

image-20230802213613282

修改自动仲裁/默认版本号

  1. 需求说明: 将SpringBoot mysql 驱动修改成5.1.49

image-20230802213707687

  1. 查看spring-boot-dependencies.pom 里面规定当前依赖的版本对应的key , 这里是 mysql.version

image-20230802223700933

  1. 修改quickstart\pom.xml 重写配置, 当更新Maven 时,就依赖到新的 mysql 驱动.

image-20230802223822637

 <!--我们自己指定mysql/驱动版本- 修改版本仲裁--><!-- 1. 方式1:显示的导入mysql依赖, 并明确的指定<version> --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><!--	2. 方式2.在自己的pom.xml文件中, 在<properties> 中指定mysql的key如:    <properties><mysql.version>5.1.49</mysql.version></properties>3. 为什么可以达到修改版本仲裁: 根据依赖就近优先原则.-->

版本仲裁就是比如他里面有个父项目,配置了大多数可能需要的jar,默认指定了每一个jar版本。如果本工程配置了就采用本工程的配置,没有就找到父项目的配置。

starter 场景启动器💕

starter 场景启动器基本介绍

  1. 开发中我们引入了相关场景的starter,这个场景中所有的相关依赖都引入进来了,比如我们做web 开发引入了,该starter 将导入与web 开发相关的所有包
 <!--导入web项目场景启动器: 会自动导入和web开发相关的所有依赖[库/jar],非常方便--><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

image-20230802225712633

  1. 依赖树: 可以看到spring-boot-starter-web ,帮我们引入了spring-webmvc,spring-web开发模块,还引入了spring-boot-starter-tomcat 场景,spring-boot-starter-json 场景,这些场景下面又引入了一大堆相关的包,这些依赖项可以快速启动和运行一个项目,提高开发效率.

image-20230802225841062

image-20230802225922351

  1. 所有场景启动器最基本的依赖就是spring-boot-starter , 前面的依赖树分析可以看到,这个依赖也就是SpringBoot 自动配置的核心依赖

image-20230802230029919

官方提供的starter

地址:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

介绍

  1. 在开发中我们经常会用到spring-boot-starter-xxx ,比如spring-boot-starter-web,该场景是用作web 开发,也就是说xxx 是某种开发场景。

  2. 我们只要引入starter,这个场景的所有常规需要的依赖我们都自动引入。

  3. SpringBoot2 支持的所有场景如下:
    https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

image-20230802230245503

第三方starter

  1. SpringBoot 也支持第三方starter。
  2. 第三方starter 不要从spring-boot 开始,因为这是官方spring-boot 保留的命名方式的。第三方启动程序通常以项目名称开头。例如,名为thirdpartyproject 的第三方启动程序项目通常被命名为thirdpartyproject-spring-boot-starter。
  3. 也就是说:xxx-spring-boot-starter 是第三方为我们提供的简化开发的场景启动器。

自动配置💕

自动配置基本介绍

  1. 学习SSM 整合时,需要配置Tomcat 、配置SpringMVC、配置如何扫描包、配置字符过滤器、配置视图解析器、文件上传等[如图],非常麻烦。而在SpringBoot 中,存在自动配置机制(就是前面的约定优于配置),提高开发效率

    2.简单回顾以前SSM 整合的配置.

image-20230802230609169

image-20230802230729165

SpringBoot 自动配置了哪些?

  1. 自动配置Tomcat
    image-20230802230756132

  2. 自动配置SpringMVC

image-20230802230815781

  1. 自动配置Web 常用功能: 比如字符过滤器, 提示: 通过获取ioc 容器,查看容器创建的组件来验证,

修改quickstart\src\main\java\com\nlc\springboot\MainApp.java

@SpringBootApplication
public class MainApp {public static void main(String[] args) {//启动springboot应用程序/项目ConfigurableApplicationContext ioc =SpringApplication.run(MainApp.class, args);//如何查看容器中注入的组件String[] beanDefinitionNames = ioc.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println("beanDefinitionName--" + beanDefinitionName);}}
}

image-20230805181802793

-------更加直接查看的方式debug-------

image-20230805181857472

  1. 自动配置: 默认扫描包结构!!! ,

官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.structuring-your-code.using-the-default-package

image-20230805182019174

如何修改默认配置

如何修改默认扫描包结构

  1. 需求:要求能扫描com.nlc包下的HiController.java 应该如何处理?
  2. 创建: quickstart\src\main\java\com\nlc\HiController.java, 并测试,这时是访问不到的.
@Controller
public class HiController {//返回hi,springboot@RequestMapping("/hi")@ResponseBodypublic String hi() {return "hi~, SpringBoot";}
}
  1. 修改MainApp.java, 增加扫描的包, 并完成测试.
// 直接在SpringBootApplication 注解后指定扫描包名
@SpringBootApplication(scanBasePackages = "com.nlc")
//@SpringBootApplication(scanBasePackages = "com.nlc")指定扫描哪个包及其子包
public class MainApp {//.....
}

resources\application.properties 配置大全

  • SpringBoot 项目最重要也是最核心的配置文件就是application.properties,所有的框架配置都可以在这个配置文件中说明
  • 地址: application.properties配置大全

因为配置代码篇幅过长,影响本篇博文整体阅读,因此单独发表一篇文章方便大家观看,希望能够帮助到您😊SpringBoot 自动配置–常用配置

自动配置遵守按需加载原则💕

基本说明

  1. 自动配置遵守按需加载原则:也就是说,引入了哪个场景starter 就会加载该场景关联的jar 包,没有引入的starter 则不会加载其关联jar

image-20230805205007890

  1. SpringBoot 所有的自动配置功能都在spring-boot-autoconfigure 包里面

image-20230805205644792

  1. 在SpringBoot 的自动配置包, 一般是XxxAutoConfiguration.java, 对应XxxxProperties.java, 如图

image-20230805205711537

实例演示

以MultipartProperties , MultipartAutoConfiguration 和application.properties 来说明,用debug的形式查看

image-20230805205742697

image-20230805205757282

😄总结

  1. 版本仲裁:如果程序员没有指定某个依赖jar 的版本,则以父项目指定的版本为准
  2. 修改pom.xml 配置时, 需要刷新Maven ,否则无法识别
  3. SpringBoot 支持第三方starter。第三方starter命名 不从spring-boot 开始,因为官方starter命名以spring-boot 开头。

😁热门专栏推荐
SpringBoot篇
Spring Boot介绍–快速入门–约定优于配置
SpringBoot 自动配置–常用配置

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

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

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

相关文章

Maven 打包生成Windows和Liunx启动文件

新建一个springboot项目。 1、项目结构 2、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocati…

Activiti7

文章目录 概述入门案例1.创建springboot项目pom.xml 2.获取ProcessEngine2.1 默认的方式2.2 编程方式获取2.3 表结构介绍 3.在线流程设计器 概述 官网地址&#xff1a;https://www.activiti.org/ Activiti由Alfresco软件开发&#xff0c;目前最高版本Activiti 7。是BPMN的一个…

CI/CD—Docker中深入学习

1 容器数据卷 什么是容器数据卷&#xff1a; 将应用和环境打包成一个镜像&#xff01;数据&#xff1f;如果数据都在容器中&#xff0c;那么我们容器删除&#xff0c;数据就会丢失&#xff01;需求&#xff1a;数据可以持久 化。MySQL容器删除了&#xff0c;删容器跑路&#…

从excel中提取嵌入式图片的解决方法

1 发现问题 我的excel中有浮动图片和嵌入式图片&#xff0c;但是openpyxl的_image对象只提取到了浮动图片&#xff0c;通过阅读其源码发现&#xff0c;这是因为openpyxl只解析了drawing文件导致的&#xff0c;所以确定需要自己解析 2 解决思路 1、解析出media资源 2、解析…

Ansible环境搭建,CentOS 系列操作系统搭建Ansible集群环境

Ansible是一种自动化工具&#xff0c;基于Python写的&#xff0c;原理什么的就不过多再说了&#xff0c;详情参考&#xff1a;https://www.itwk.cc/post/403.html https://blog.csdn.net/qq_34185638/article/details/131079320?spm1001.2014.3001.5502 环境准备 HOSTNAMEIP…

大后台,小前台——组合式创新加速推进产教融合

2023年8月1日&#xff0c;由成都知了汇智科技有限公司组织召开的“2023产教融合项目推进闭门研讨会”于成都市高新区软件园G8区7楼正式举行&#xff0c;本次会议基于“产业链的用人需求、资本链的回报诉求、服务链的价值要求、教育链的延伸需求”进行交流探讨&#xff0c;形成稳…

Java-认识String

目录 一、String概念及创建 1.1 String概念 1.2 String的创建 二、String常用方法 2.1 String对象的比较 2.2 字符串查找 2.3 转化 2.4 字符串替换 2.5 字符串拆分 2.6字符串的截取 2.7 其他操作方法 2.8 字符串修改 三、面试题 一、String概念及创建 1.1 String概念 Java中…

2023上半年手机及数码行业分析报告(京东销售数据分析)

2023年上半年&#xff0c;手机市场迎来复苏&#xff0c;同环比来看&#xff0c;销量销额纷纷上涨。 而数码市场中&#xff0c;各个热门品类表现不一。微单相机及智能手表同比去年呈现增长态势&#xff0c;而笔记本电脑市场则出现下滑。 基于此现状&#xff0c;鲸参谋发布了20…

Git Submodule 更新子库失败 fatal: Unable to fetch in submodule path

编辑本地目录 .git/config 文件 在 [submodule “Assets/CommonModule”] 项下 加入 fetch refs/heads/:refs/remotes/origin/

AWS Amplify 部署node版本18报错修复

Amplify env&#xff1a;Amazon Linux:2 Build Error : Specified Node 18 but GLIBC_2.27 or GLIBC_2.28 not found on build 一、原因 报错原因是因为默认情况下&#xff0c;AWS Amplify 使用 Amazon Linux:2 作为其构建镜像&#xff0c;并自带 GLIBC 2.26。不过&#xff0c;…

每天一道leetcode:剑指 Offer 04. 二维数组中的查找(中等二分查找)

今日份题目&#xff1a; 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 示…

Qt中ffmpeg API存储和显示摄像头视频

Qt中ffmpeg API存储和显示摄像头视频的功能需要之前写的视频ffmpegAPI的视频播放的流程。 代码源码位置&#xff1a;https://download.csdn.net/download/qq_43812868/88157743?spm1001.2014.3001.5503 一、存储和显示摄像头的视频的流程 这是读取打开视频文件的流程&#x…

十三、ESP32PS2摇杆(ADC)

1. 运行效果 在上下左右操作PS2摇杆的时候,会检测到数据 2. 滑动电阻

Docker基本使用

查看本地镜像 查看本地&#xff1a;docker imagesPull镜像&#xff1a;docker pull nginx:latest登录镜像&#xff1a;docker login hub.docker.com -u **** -p ****制作镜像&#xff1a;docker build -t xxxx:v1push&#xff1a;docker push xxx:v1删除镜像:docker rmi #imag…

scikit-plot 使用笔记

scikit-plot是基于sklearn和Matplotlib的库&#xff0c;主要的功能是对训练好的模型进行可视化。 安装&#xff1a; pip install scikit-plot 功能1&#xff1a;评估指标可视化 scikitplot.metrics.plot_confusion_matrix快速展示模型预测结果和标签计算得到的混淆矩阵。 im…

图像 检测 - RetinaNet: Focal Loss for Dense Object Detection (arXiv 2018)

图像 检测 - RetinaNet: Focal Loss for Dense Object Detection - 密集目标检测中的焦点损失&#xff08;arXiv 2018&#xff09; 摘要1. 引言2. 相关工作References 声明&#xff1a;此翻译仅为个人学习记录 文章信息 标题&#xff1a;RetinaNet: Focal Loss for Dense Obje…

java: 无法访问org.springframework.web.bind.annotation.GetMapping(springboot构建时出现问题)

spring boot构建完成后出现以下问题 报错原因&#xff1a;SpringBoot 3.0以上版本要求JDK 17以上&#xff0c;jdk版本1.8 与 spring boot 3.0.1 版本不匹配 解决方法&#xff1a;

线性代数(二) 矩阵及其运算

前言 行列式det(A) 其实表示的只是一个值 ∣ a b c d ∣ a d − b c \begin{vmatrix} a & b\\ c & d\end{vmatrix} ad -bc ​ac​bd​ ​ad−bc&#xff0c;其基本变化是基于这个值是不变。而矩阵表示的是一个数表。 定义 矩阵与线性变换的关系 即得 ( a 11 a 12…

Wisej.NET Crack,Wisej.NET的核心功能

Wisej.NET Crack&#xff0c;Wisej.NET的核心功能 Wisej.NET是一个跨平台的web框架&#xff0c;用于使用.NET和C#/VB.NET而不是HTML和JavaScript构建现代HTML5应用程序。它包含创建任务关键型web应用程序所需的一切&#xff0c;包括UI组件、会话处理、状态管理和后端集成。借助…

C语言代码的x86-64汇编指令分析过程记录

先通过Xcode创建一个terminal APP&#xff0c;语言选择C。代码如下&#xff1a; #include <stdio.h>int main(int argc, const char * argv[]) {int a[7]{1,2,3,4,5,6,7};int *ptr (int*)(&a1);printf("%d\n",*(ptr));return 0; } 在return 0处打上断点&…