SpringBoot的依赖管理和自动配置

与其明天开始,不如现在行动!

文章目录

    • 1 依赖管理机制
    • 2 自动配置机制
      • 2.1 初步理解
      • 2.2 完整流程
  • 💎总结


1 依赖管理机制

  1. 为什么导入starter-web后所有相关依赖都会导入进来?

    1. 开发什么场景,导入什么场景启动器-spring-boot-starter-
    2. maven依赖传递原则,a-b-c:a就拥有c
    3. 导入一个场景启动器,就会自动把整个场景的所有核心依赖全部导入进来
  2. 为什么版本号都不用写?

    1. 每个boot项目都有一个父项目:spring-boot-starter-parent

    2. parent的父项目是:spring-boot-dependencies

    3. 在里面版本仲裁中心就写好了每个jar包的版本

    4. 要自定义版本号

      1. 直接在依赖下面声明版本号
      2. 利用maven的就近原则
        • 直接在当前项目使用<properties>标签
      <properties><mysql.version>8.0.31</mysql.version>
      </properties>
      
    5. 第三方jar包要自己声明

image-20231206142937666

2 自动配置机制

2.1 初步理解

  1. 自动配置的Tomcat、SpringMVC等
    1. 以前:要配置一堆的组件
    2. 现在:SpringBoot自动配置好这些组件,容器中有了什么组件,就具有什么功能
    3. 导入场景,容器中就会自动配置好这个场景的核心组件
  2. 默认的包扫描规则
    1. @SpringBootApplication注解的类就是主程序
    2. SpringBoot只会扫描主程序所在的包及其下面的子包:com.wen.usercenter及其子包
  3. 配置默认值
    1. 配置文件(如:application.properties)的所有配置项是和某个类的对象值进行一一绑定的
    2. 绑定了配置文件中每一项值的类:配置属性类
  4. 按需加载自动配置
    1. 导入场景spring-boot-starter-web
    2. 场景启动器除了会导入相关依赖,还导入一个spring-boot-starter,是所有starterstarter,基础核心starter
    3. spring-boot-starter导入了一个包spring-boot-autoconfigure。包里面都是各种场景的AutoConfiguration自动配置类
    4. 虽然全场景的自动配置都在spring-boot-autoconfigure这个包,但是不是全部开启的。导入哪个场景就开启哪个。

总结:导入场景启动器,触发spring-boot-autoconfigure这个包的自动配置生效,容器中就会具有相关的功能

2.2 完整流程

思考:

  1. SpringBoot怎么实现导入一个starter,写一些简单的配置,应用就能跑起来,我们无需关心整合?
  2. 为什么Tomcat的端口号可以配置在application.properties中,并且Tomcat能启动成功?
  3. 导入场景后哪些自动配置能生效?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

流程:

  1. 导入stater:导入了web开发场景
    1. 场景启动器导入了相关场景的所有依赖:starter-jsonstarter-tomcatspringmvc
    2. 每个场景启动器都引入了一个spring-boot-starter核心场景启动器
    3. 核心场景启动器引入了spring-boot-autoconfigure自动配置包,里面囊括了所有场景的所有配置
    4. 只要这个包下的所有类都能生效,那么相当于SpringBoot官方写好的整合功能就生效了
    5. SpringBoot默认扫描不到spring-boot-autoconfigure下写好的所有配置类
  2. 主程序:@SpringBootApplication
    1. @SpringBootApplication由三个注解组成:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan
    2. SpringBoot默认扫描不到spring-boot-autoconfigure下写好的所有配置类
    3. @EnableAutoConfiguration:SpringBoot开启自动配置的核心。
      1. 是由@Import({AutoConfigurationImportSelector.class})提供功能:批量给容器中导入组件
      2. SpringBoot启动会默认加载142个配置类
      3. 这142个配置类来自于spring-boot-autoconfigure包下META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件指定的所有类
      4. 项目启动的时候利用@Import批量导入组件机制把autoconfigure包下的142个xxxAutoConfiguration类导入进来(自动配置类)
      5. 按需生效:
        1. 虽然导入了142个自动配置类,但是并不是都能生效
        2. 每个自动配置类,都有条件注解@ConditionOnXxx,只有条件成立,才能生效
      6. xxxAutoConfiguration自动配置类
        1. 给容器中使用@Bean放一堆组件
        2. 每个自动配置类都有可能由注解:@EnableConfigurationProperties(ServerProperties.class),用来把配置文件中配的指定前缀的属性值封装到xxxProperties属性类
        3. 以Tomcat为例,把服务器的所有配置都是以server开头的。配置都封装到属性类中
        4. 给容器中放的所有组件的一些核心参数,都来自于xxxPropertiesxxxProperties都适合配置文件绑定的
        5. 只需要改配置文件的值,核心组件的底层参数都能修改
  3. 写业务,无需关心各种整合(底层这些整合都写好了,而且也生效了)

核心流程:

  1. 导入starter,就会导入autoconfigure
  2. autoconfigure包里面有一个文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,里面指定了所有启动要加载的自动配置类
  3. @EnableAutoConfiguration会自动的把上面文件里面写的所有自动配置类都导入进来。
  4. xxxAutoConfiguration给容器中导入很多组件,根据条件注解按需加载 ,组件都是从xxxProperties中提取属性值
  5. xxxProperties又是和配置文件进行绑定

效果:导入starter、修i该配置文件、就能修改底层行为


💎总结

本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


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

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

相关文章

Redis 环境搭建2

文章目录 第2关&#xff1a;使用 Redis 第2关&#xff1a;使用 Redis 本文是接着上篇文章写的第二关代码&#xff0c;部分人再进入第二关时不会保留第一关的配置的环境&#xff0c;可以通过下面一句代码进行检验。 redis-cli -p 7001 -c如果进入到了redis界面就是有环境&…

问题:batchnormal训练单个batch_size就会报错吗

Batch Normalization&#xff08;批标准化&#xff09;是一种深度学习中的正则化技巧&#xff0c;它可以改进网络的训练过程。在训练神经网络时&#xff0c;Batch Normalization可以帮助解决内部协变量偏移&#xff08;Internal Covariate Shift&#xff09;的问题。 在标准的…

pytorch serve开始-Getting started

官网链接 Getting started — PyTorch/Serve master documentation 安装TorchServe和torch-model-archiver 安装依赖 注意::对于Conda&#xff0c;运行Torchserve需要Python >3.8。 对于基于Debian的系统/ MacOS CPU python ./ts_scripts/install_dependencies.py 对…

【Hadoop】高可用集群搭建

知识目录 一、写在前面&#x1f495;二、Zookeeper安装✨三、Hadoop配置✨四、Hadoop HA自动模式✨五、HA脚本分享✨七、结语&#x1f495; 一、写在前面&#x1f495; 大家好&#xff01;这篇文章是我在搭建Hdfs的HA(高可用)时写下的详细笔记与感想&#xff0c;希望能帮助到大…

Notes数据直接在Excel中统计

大家好&#xff0c;才是真的好。 我希望你看过前面两篇内容《Domino REST API安装和运行》和《Domino REST API安装和运行》&#xff0c;因为今天我们正是使用REST API方式在Excel中查询和统计Notes数据。 不过首先你得知道一个OData协议&#xff0c;全名Open Data Protocol(…

布隆过滤器,Redis之 bitmap,场景题【如果微博某个大V发了一条消息,怎么统计有多少人看过了】

文章目录 一、什么是 bitmap1-1、Bitmap 相关命令二、bitmap 和 set 对比2-1、数据准备2-2、内存对比2-3、性能对比三、布隆过滤器3-1、理论主要作用如何将数据放到过滤器内呢?注意事项布隆过滤器 有两个重要的参数3-2、代码实现3-3、Java中的hash函数最近面试,面试官问了一个…

Windows系统Java开发环境安装

总结一下Java软件开发工程师常见的环境的安装&#xff0c;仅限Windows环境。 以下下载链接均来自官网&#xff0c;网络条件自己克服。 目录 1. JDKJDK Oracle 官网下载地址配置系统环境变量 2. Mavenapache maven 官网地址本地仓库和中央仓库配置配置系统环境变量 3. GitGit 官…

springboot3 liquibase SQL执行失败自动回滚,及自动打tag

一&#xff1a; 自动执行回滚&#xff0c; 已执行成功的忽略&#xff0c;新sql执行失败则执行新sql文件中的回滚sql pom.xml <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>4.25.0&…

【工厂方法】设计模式项目实践

前言 以采集数据处理逻辑为例&#xff0c;数据采集分为不同种类如&#xff1a;MQTT、MODBUS、HTTP等&#xff0c;不同的采集数据有不同的解析处理逻辑。但总体解析处理步骤是固定的。可以使用工厂方法设计模式简化代码&#xff0c;让代码变得更加优雅。 代码实践 抽象类 总体…

分布式环境下的session 共享-基于spring-session组件和Redis实现

1、问题概述 不是所有的项目都是单机模式的&#xff0c;当一个项目服务的局域比较广&#xff0c;用户体量比较大&#xff0c;数据量较大的时候&#xff0c;我们都会将项目部署到多台服务器上&#xff0c;这些个服务器都是分布在不同的区域&#xff0c;这样实现了项目的负载和并…

Redis有序集合对象

一.编码 有序集合的编码可以是ziplist或者skiplist。 ziplist编码的有序集合对象使用压缩列表作为底层实现&#xff0c;每一个集合元素使用紧挨在一起的两个压缩列表节点来保存。第一个节点保存元素的成员(member)&#xff0c;而第二个元素则保存元素的分值(score)。 127.0.0.…

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_提示信息显示

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_ 点击启动&#xff1a;提示信息显示 package com.example.myapplication.slice;import com.example.myapplication.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; impor…

12.1电梯控制器——文档记录

《数字逻辑》实验报告 实验名称 项目三 电梯控制器设计 一、实验目的 设计一个多楼层的电梯控制器系统&#xff0c;并能在开发板上模拟电梯运行状态。可以利用按键作为呼叫按键&#xff0c;数码管显示电梯运行时电梯所在楼层&#xff0c;led灯显示楼层叫梯状态。 二、实…

太良心了!微软面向初学者,开源机器学习、数据科学、AI、LLM

大家好&#xff0c;推荐几个质量上乘且完全免费的微软开源课程&#xff0c;由粉丝小伙伴梳理&#xff0c;分享给大家。 文末可以加我们粉丝群 面向初学者的机器学习课程 ML for beginners banner 地址&#xff1a;https://microsoft.github.io/ML-For-Beginners/#/ 学习经典…

讲解把一个文件夹里面的内容复制到另一个文件夹中的操作

&#x1f38a;专栏【Java小练习】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;需求⭐思路✨代码✨效果 &#x1f384;如果要复制…

Vue3:表格单元格内容由:图标+具体内容 构成

一、背景 在Vue3项目中&#xff0c;想让单元格的内容是由 &#xff1a;图标具体内容组成的&#xff0c;类似以下效果&#xff1a; 二、图标 Element-Plus 可以在Element-Plus里面找是否有符合需求的图标iconfont 如果Element-Plus里面没有符合需求的&#xff0c;也可以在这…

Proteus仿真--基于NM24C08的EEPROM仿真设计

本文介绍基于NM24C08的EEPROM仿真设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 其中NM24C08是标准的2线总线接口的串行EEPROM&#xff0c;开机画面在LCD12864上显示 仿真图如下 仿真运行视频 Proteus仿真--基于NM24C08的EEPROM仿真设计 附完整Proteus仿真资料…

零一万物模型折腾笔记:官方 Yi-34B 模型基础使用

当争议和流量都消失后&#xff0c;或许现在是个合适的时间点&#xff0c;来抛开情绪、客观的聊聊这个 34B 模型本身&#xff0c;尤其是实践应用相关的一些细节。来近距离看看这个模型在各种实际使用场景中的真实表现和对硬件的性能要求。 或许&#xff0c;这会对也想在本地私有…

Docker本地部署Drupal内容管理框架并实现公网远程访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址7. 结语 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它…

使用条件格式突出显示单元格数据-sdk

使用条件格式突出显示单元格数据 2023 年 12 月 6 日 根据数据值将视觉提示应用于特定单元格、行或列&#xff0c;从而更轻松地识别模式和趋势。 网格中的条件格式允许用户根据单元格或范围包含的数据将视觉样式应用于单元格或范围。它通过以数据驱动的方式突出显示关键值、异常…