SpringBoot的依赖管理的两个问题

介绍

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


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

  1. SpringBoot项目,包含了一个父依赖 spring-boot-starter-parent
<parent>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-starter-parent<11./artifactId>
    <version>2.2.2.RELEASEversion>
    <relativePath/> 
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开发场景所需的所有底层依赖。
    SpringBoot的依赖管理的两个问题_第1张图片

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

  3. Spring Boot除了提供有上述介绍的Web依赖启动器外,还提供了其他许多开发场景的相关依赖,打开Spring Boot官方文档,搜索“Starters”关键字查询场景依赖启动器
    SpringBoot的依赖管理的两个问题_第2张图片

  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文件中引入这些第三方的依赖启动器时,要配置对应的版本号。

你可能感兴趣的:(spring,boot,spring,java)