案例解析 SpringBoot 中的版本管理与依赖管理

本文介绍了SpringBoot框架的特点,包括简化依赖设置和配置、自动配置功能,以及SpringBoot的parent、starter和引导类的作用。重点讲解了如何通过parent依赖管理和starter减少版本冲突,以及引导类在项目启动中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来 简化 Spring 应用的初始搭建以及开发过程

Spring 程序缺点:依赖设置繁琐、配置繁琐

SpringBoot 程序优点:起步依赖(简化依赖配置)、自动配置(简化常用工程相关配置)、辅助功能(内置服务器…)



一、入门案例

入门案例选用 springboot 的版本为 2.5.4,案例工程目录结构:
在这里插入图片描述

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:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.axy</groupId>
    <artifactId>springboot_01_01_quickstart</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_01_01_quickstart</name>
    <description>springboot_01_01_quickstart</description>
    <properties>
        <java.version>8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

SpringbootQuickstartApplication.java:

@SpringBootApplication
public class SpringbootQuickstartApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootQuickstartApplication.class, args);
    }
}

二、SpringBoot 的 parent

下面通过以下例子,说明parent依赖管理的作用:

工程 A 与工程 B 所使用的依赖坐标都要使用下面的三个坐标,因此在各自的pom文件中都要做如下引用:
在这里插入图片描述
因此,可以将坐标抽取出来,放到一个单独的 pom 文件中,工程 A 和工程 B 在各自的文件中引用该 pom 文件:
在这里插入图片描述
但是以上的方式还可以再继续做优化,就是将 pom 版本与坐标做集中管理。
左边 pom 文件将版本信息集中起来管理,配置成 maven 的属性,右边 pom 文件的坐标引用左边的 maven 属性
在这里插入图片描述
左边的版本信息可以再继续扩展,将所有能够用到的版本信息都配置在左侧 pom 文件:
在这里插入图片描述
好处:日后不用担心坐标冲突的事情,springboot 做了大的版本统一,确保当前版本管理下的包在一起使用不会冲突

日后开发,变成以下步骤:
在这里插入图片描述


SpringBoot 中是如何做版本管理的呢?

现假设 pom 文件中导入没有指定版本的 javax-servlet-api 坐标,刷新 pom 文件后,自动指定引入 javax 包的版本为 4.0.1:
在这里插入图片描述
原因在于,pom 中继承了 spring-boot-starter-parent,而 spring-boot-starter-parent 中又继承了 spring-boot-dependencies,其里面集中做了 版本管理。并且,后文又通过 <dependencyManagement>…</dependencyManagement> 做了一系列的 坐标依赖管理。那么日后,当引入其中的坐标的时候,就不用再指定版本了。

在这里插入图片描述

在这里插入图片描述
注:<dependencyManagement> 用于做依赖管理,当 pom 文件继承该模块后不会引入依赖管理中的相应包,只有当 pom 文件引用该坐标后,才会引用相关联的包。并且在不指定版本的情况下,会直接使用版本管理坐标中的版本信息。


补充:基于阿里云创建的项目的版本管理

基于阿里云创建的项目,如何做版本管理?
阿里云创建的项目,直接引入了 spring-boot-dependencies,效果是一样的。
在这里插入图片描述
阶段总结:

① 开发 SpringBoot 程序要继承 spring-boot-starter-parent
② spring-boot-starter-parent 中定义了若干个依赖管理(严格来讲是 spring-boot-dependencies)
继承 parent 模块可以避免多个依赖使用相同技术时出现依赖版本冲突
④ 继承 parent 的形式也可以采用引入依赖的形式实现效果


三、SpringBoot 的 starter

SpringBoot 中的 starter 定义了当前项目使用的很多依赖坐标,以达到减少依赖配置的目的。

如:pom 文件引入了 spring-boot-starter-web,通过依赖传递来引入很多个其他的 starter,其他的 starter 又引入了 具体的坐标…
在这里插入图片描述


四、SpringBoot 的引导类

SpringBoot 的引导类是 Boot 工程的执行入口,运行 main 方法就可以启动项目。项目运行后初始化 Spring 容器,ComponentScan 注解默认会扫描引导类 所在包及其子包,将有相应的对象加载 bean。
在这里插入图片描述

如:当前 User 类都 在 引导类所在包 axy 的下面,则将目标类加载成 bean:
在这里插入图片描述

当前 User 类 不在 引导类所在包 axy 的下面,则不会将目标类加载成 bean:
在这里插入图片描述


参考链接:黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiu Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值