SpringBoot的依赖管理的两个问题

介绍

SpringBoot的两大核心,依赖管理和自动配置。传统的Spring框架,需要导入各种依赖jar,但是Spring导入的各种starter,往往不需要额外版本号就能完美匹配。


问题1:为啥导入依赖时不需要指定版本?

  1. SpringBoot项目,包含了一个父依赖 spring-boot-starter-parent
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent<11./artifactId>
    <version>2.2.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
  1. spring-boot-starter-parent作为了SpringBoot项目的统一父项目依赖管理,只需要修改这一项目版本号即可修改相关的依赖版本。
  2. spring-boot-starter-parent 的properties定义了一些,java的版本,编码和插件管理等信息后,还有一个父依赖。spring-boot-dependencies
  3. spring-boot-dependencies 中的properties中定义了大量的版本号,指定了与对应的SpringBoot版本匹配的依赖的版本。并且通过 dependencyManagement进行了版本的管理。这样的话所有子项目引入其中包含的jar时,可以不用显式的列出版本号,Maven会向上级寻找拥有dependencyManagement 的项目。使用其指定的版本号,dependencyManagement 只定义依赖的声明,并不引入实现。

问题2:项目运行时依赖的jar是哪儿来的?

  1. 项目引入spring-boot-starter-web 时,看起来只引入了一个jar,但是点进去之后发现其实引入了Web开发场景所需的所有底层依赖。
    在这里插入图片描述

  2. 这些依赖的版本,还是由spring-boot-starter-parent父依赖进行的统一管理

  3. Spring Boot除了提供有上述介绍的Web依赖启动器外,还提供了其他许多开发场景的相关依赖,打开Spring Boot官方文档,搜索“Starters”关键字查询场景依赖启动器
    在这里插入图片描述

  4. Spring Boot官方并不是针对所有场景开发的技术框架都提供了场景启动器,例如数据库操作框架MyBatis、阿里巴巴的Druid数据源等,Spring Boot官方就没有提供对应的依赖启动器。为了充分利用Spring Boot框架的优势,在Spring Boot官方没有整合这些技术框架的情况下,MyBatis、Druid等技术框架所在的开发团队主动与Spring Boot框架进行了整合,实现了各自的依赖启动器,例如mybatis-spring-boot-starter、druid-spring-boot-starter等。在pom.xml文件中引入这些第三方的依赖启动器时,要配置对应的版本号。

posted @   青花石  阅读(26)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示