当前位置: 首页 > news >正文

springBoot中的Starter-启动器

简介:

Spring Boot 启动器(Starter)是 Spring Boot 生态中用于简化依赖管理和自动化配置的核心组件。其设计目标是让开发者通过引入一个预定义的依赖集合,快速集成特定功能模块(如 Web、数据库、安全等),同时避免手动管理依赖版本和复杂配置。以下是其核心特性和实现原理的总结:


1. 核心功能

  1. 依赖集合与传递

    • 每个启动器(如 spring-boot-starter-web)是一个 Maven/Gradle 依赖,内部封装了功能完整的依赖链。例如,引入 Web 启动器会自动添加 Spring MVC、嵌入式 Tomcat、Jackson 等子依赖。

    • 依赖传递性:通过 Maven 的 <dependencies> 声明,启动器会将其所有直接依赖(transitive dependencies)传递到项目中,开发者无需手动逐个添加。

  2. 版本统一管理

    • 启动器依赖的版本由 Spring Boot 的物料清单(BOM)(即 spring-boot-dependencies)统一管理。

    • BOM 文件定义了所有官方支持的依赖版本,确保兼容性。开发者只需指定 Spring Boot 版本,无需关心子依赖的版本冲突。

  3. 自动配置(Auto-configuration)

    • 启动器通常与自动配置类(如 @EnableAutoConfiguration)绑定。

    • Spring Boot 根据类路径中的依赖(如 Tomcat、JDBC 驱动)动态启用默认配置。例如,检测到 spring-boot-starter-data-jpa 时,会自动配置数据源和 Hibernate。

  4. 约定优于配置

    • 启动器遵循命名规范(如 spring-boot-starter-{模块名}),开发者通过名称即可明确其用途。

    • 第三方库也可提供自定义启动器(如 mybatis-spring-boot-starter),无缝集成到 Spring Boot 生态。


总结:

启动器实现原理

1. 依赖集合:
每个启动器通常对应一个特定的功能集或者一个完整的应用模块,如 spring-boot-starter-web 就包含了构建 Web 应用程序的所有基本依赖项,如 Spring MVC, Tomcat 嵌入式容器等。

2. 依赖传递:
当你在项目中引入一个启动器时,它不仅会在自身作为依赖加入到你的项目中,还会把它的所有直接依赖项(transitive dependencies)也加入进来。这意味着你不需要单独声明这些依赖项,它们会自动成为项目的一部分。

3. 版本管理:
启动器内部已经指定了所有依赖项的具体版本,这些版本信息存储在一个公共的 ROM(Bill of Materials,物料清单)文件中,通常是 spring-boot-dependencies 。当引入启动器时,实际上也间接引用了这个 ROM,从而确保了所有依赖项版本的一致性。

4. 自动配置:
许多启动器还提供了自动配置(Auto-configuration),这是一种机制,允许 Spring Boot 根据类路径上的可用组件自动设置你的应用程序。例如,如果类路径上有 Spring MVC 和嵌入式 Tomcat,则 Spring Boot 会自动配置它们,并准备好一个 web 应用程序。

http://www.xdnf.cn/news/412651.html

相关文章:

  • 重学安卓14/15自由窗口freeform企业实战bug-学员作业
  • 本地文件查重管理工具EasyFileCount v3.0.5.1绿色版,支持查找大重复文件+自动分类
  • 客户端限流主要采用手段:纯前端验证码、禁用按钮、调用限制和假排队
  • jwt学习
  • 如何通过DNS解析实现负载均衡?
  • Android Exoplayer 实现多个音视频文件混合播放以及音轨切换
  • 3d模型的添加与设置
  • VMware虚拟机实例-docker启动失败
  • Linux文件编程——read函数与lseek函数
  • 火狐浏览器安装自定义插件
  • 人工智能的哲学与社会影响
  • 【时时三省】(C语言基础)字符数组的输入输出
  • 做好的QT软件,换一个笔记本打开后发现字体很小,部分字体还被控件遮挡
  • 提示工程实战指南:Google白皮书关键内容一文讲清
  • 第二十二天打卡
  • #将一个 .c 文件转变为可直接运行的文件过程及原理
  • CTF实战秘籍:跨平台文件合并与数据重构技术
  • linux-进程信号的产生
  • OJ判题系统第4期之判题机模块架构——设计思路、实现步骤、代码实现(工厂模式、代理模式的实践)
  • 嵌入式MCU和Linux开发哪个好?
  • FreeRTOS的学习记录(基础知识)
  • FPGA----petalinux开机启动自定义脚本/程序的保姆级教程(二)
  • 【超详细教程】安卓模拟器如何添加本地文件?音乐/照片/视频一键导入!
  • 利用基于LLM的概念提取和FakeCTI数据集提升网络威胁情报对抗虚假信息活动的能力
  • 区块链+农业:从田间到餐桌的信任革命
  • Ref是什么
  • 洛谷 P1082:[NOIP 2012 提高组] 同余方程 ← 求逆元
  • 代码随想录训练营第二十二天| 101.对称二叉树 100.相同的树
  • 综合实验二之grub2密文加密
  • (leetcode) 力扣100 10.和为K的子数组(前缀和+哈希)