Spring Boot 的 starter 机制

传统的 Spring 项目想要运行,不仅需要导入各种依赖,还要对各种 XML 配置文件进行配置,十分繁琐,但 Spring Boot 项目在创建完成后,即使不编写任何代码,不进行任何配置也能够直接运行,这都要归功于 Spring Boot 的 starter 机制。

1.starter

Spring Boot 将日常企业应用研发中的各种场景都抽取出来,做成一个个的 starter(启动器),starter 中整合了该场景下各种可能用到的依赖,用户只需要在 Maven 中引入 starter 依赖,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置。starter 提供了大量的自动配置,让用户摆脱了处理各种依赖和配置的困扰。所有这些 starter 都遵循着约定成俗的默认配置,并允许用户调整这些配置,即遵循“约定大于配置”的原则。

并不是所有的 starter 都是由 Spring Boot 官方提供的,也有部分 starter 是第三方技术厂商提供的,例如 druid-spring-boot-starter 和 mybatis-spring-boot-starter 等等。

以 spring-boot-starter-web 为例,它能够为提供 Web 开发场景所需要的几乎所有依赖,因此在使用 Spring Boot 开发 Web 项目时,只需要引入该 Starter 即可,而不需要额外导入 Web 服务器和其他的 Web 依赖。

在pom.xml中引入 spring-boot-starter-web,如下:

<?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>
    <!--SpringBoot父项目依赖管理-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.by</groupId>
    <artifactId>sdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sdemo</name>
    <description>sdemo</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--导入 spring-boot-starter-web-->
        <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>

在该项目中执行以下 mvn 命令查看器依赖树。
在这里插入图片描述

mvn dependency:tree

执行结果如下:

在这里插入图片描述

控制台不方便查找,我们可以输出到文本文件。

mvn dependency:tree>tree.txt

如果想查看具体某一个包:

#Linux系统
mvn dependency:tree |grep logging
#Windows系统
mvn dependency:tree |findstr logging

在这里插入图片描述
在这里插入图片描述

2.spring-boot-starter-parent

<!--SpringBoot父项目依赖管理-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.7</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

Spring Boot 项目可以通过继承 spring-boot-starter-parent 来获得一些合理的默认配置

  • 默认 JDK 版本(Java 8)

  • 默认字符集(UTF-8)

  • 依赖管理功能

  • 资源过滤

  • 默认插件配置

  • 识别 application.properties 和 application.yml 类型的配置文件

查看 spring-boot-starter- parent 的pom文件可以发现其有一个父级依赖 spring-boot-dependencies
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.7</version>
<packaging>pom</packaging>
<name>spring-boot-dependencies</name>
.....
<properties>
 <activemq.version>5.16.4</activemq.version>
 ...
 <freemarker.version>2.3.31</freemarker.version>
 ....
 <hibernate.version>5.6.7.Final</hibernate.version>
 <hibernate-validator.version>6.2.3.Final</hibernate-validator.version>
 ....
 <jakarta-json.version>1.1.6</jakarta-json.version>
 <jakarta-json-bind.version>1.0.2</jakarta-json-bind.version>
....
 <mysql.version>8.0.28</mysql.version>

</properties>
<dependencyManagement>
 ....
</dependencyManagement>
<build>
 <pluginManagement>
  ....
 </pluginManagement>
</build>
</project>


以上配置中,部分元素说明如下:

  • dependencyManagement :负责管理依赖;

  • pluginManagement:负责管理插件;

  • properties:负责定义依赖或插件的版本号。

spring-boot-dependencies 通过 dependencyManagement 、pluginManagement 和 properties 等元素对一些常用技术框架的依赖或插件进行了统一版本管理,例如 Activemq、Spring、Tomcat 等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值