首页 > 其他分享 >Spring Boot中的依赖管理及自动配置

Spring Boot中的依赖管理及自动配置

时间:2023-09-10 21:31:43浏览次数:35  
标签:依赖 SpringBoot parent 版本号 spring boot Boot Spring

你真的理解 Spring Boot 项目中的 parent 吗? - Spring Boot2 教程合集 (javaboy.org)

【SpringBoot】SpringBoot项目中的依赖管理及自动配置 (qq.com)

创建一个Spring Boot项目有三种方式,如在线创建、使用IDEA开发工具创建、使用Maven创建,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.3.RELEASE</version>
</parent>

这是此SpringBoot项目依赖的父工程

当我们创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent ,也可以不继承自它,我们先来看第一种情况。先来看 parent 的基本功能有哪些?

  1. 定义了 Java 编译版本为 1.8 。
  2. 使用 UTF-8 格式编码。
  3. 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
  4. 执行打包操作的配置。
  5. 自动化的资源过滤。
  6. 自动化的插件配置。
  7. 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。

源码分析

我们直接打开pom.xml,看到核心的配置就是<parent>节点:

图片

在这里指定了spring boot的版本。

进入到spring-boot-starter-parent:

图片

我们可以看到,它继承自spring-boot-dependencies ,这里保存了基本的依赖信息,另外我们也可以看到项目的编码格式,JDK 的版本等信息,当然也有我们前面提到的数据过滤信息。最后,我们再根据它的parent 中指定的 spring-boot-dependencies 位置,来看看 spring-boot-dependencies 中的定义:

图片

在这里,我们看到了版本的定义以及 dependencyManagement 节点,明白了为啥 Spring Boot 项目中部分依赖不需要写版本号了。

那不用parent怎么实现不指定版本号呢

但是并非所有的公司都需要这个 parent ,有的时候,公司里边会有自己定义的 parent ,我们的 Spring Boot 项目要继承自公司内部的 parent ,这个时候该怎么办呢?

一个简单的办法就是我们自行定义 dependencyManagement 节点,然后在里边定义好版本号,再接下来在引用依赖时也就不用写版本号了,像下面这样:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.5.5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

这样写之后,依赖的版本号问题虽然解决了,但是关于打包的插件、编译的 JDK 版本、文件的编码格式等等这些配置,在没有 parent 的时候,这些统统要自己去配置。

父工程定义mysql版本为8.0.22,我想用5.0.7咋办呢

图片

直接在引入依赖时注明版本号即可,那么整个项目就会用你自己定义的版本号。

image-20230910211335804

自动配置

SpringBoot自动配置好了tomcat

SpringBoot项目运行时会用到自己内置的tomcat,说明在上述的依赖管理中spring-boot-starter-web已经引入了关于tomcat 的依赖。

图片

自动配好了SpringMVC常见组件

我们通过如下测试看看其配置好了哪些组件

图片

我们在启动SpringBoot项目时,从ioc容器中捞取出了其自动加载的容器。

图中框出来的characterEncodingFilter就是其中一个组件,这个组件是防止中文乱码。

在之前的SpringMVC项目中需要我们手动配置,而在这里SpringBoot工程已经为我们自动配置。

自动配置了默认的包结构

在之前的SpringMVC项目中需要在xml文件中配置需要扫描包的路径,而SpringBoot项目自己有默认的路径及扫描规则,不需要手动配置。

图片

SpringBoot会扫描主启动类MainApplication同级及次级的所有目录及文件,在上图中也就是在boot目录下的所有包都能被扫描。

如果你一定想要扫描到和boot目录同级的文件,那么只需要如下图所示

图片

TestController比MainApplication高了一级,默认是扫描不到的,但是在主启动类中如果指定scanBasePackages扫描的路径就可以找到了。

标签:依赖,SpringBoot,parent,版本号,spring,boot,Boot,Spring
From: https://blog.51cto.com/coderge/7428265

相关文章

  • SpringBoot 如何实现文件上传和下载
    当今Web应用程序通常需要支持文件上传和下载功能,SpringBoot提供了简单且易于使用的方式来实现这些功能。在本篇文章中,我们将介绍SpringBoot如何实现文件上传和下载,同时提供相应的代码示例。 文件上传SpringBoot提供了Multipart文件上传的支持。Multipart是HTTP协议中的一种......
  • BOOT跳转APP,STM32F4正常,但是GD32F4起不来的问题
    问题描述: stm32F4可以正常从BOOT跳转执行APP,到了GD32F4,卡死在APP程序的这里。   临时解决办法:APP程序内 把这两句代码都屏蔽掉就好了。 相关资料搜索:  最佳解决方案:在APP里面,先rcc_deinit一下,如下所示。    .......
  • mybatis-plus中添加的依赖,使用的方法,分页查询中添加的拦截器
    2023-09-10mybatis-plus中添加的依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency>使用的......
  • 多模块项目依赖中,项目启动失败-org.yaml.snakeyaml.error.YAMLException: java.nio.ch
    异常问题专栏收录该内容22篇文章1订阅订阅专栏错误:org.yaml.snakeyaml.error.YAMLException:java.nio.charset.MalformedInputException:Inputlength=1原因:yaml/yml配置文件解析失败解决:把项目编码(FileEncodings)全部设置为UTF-8,后重启IDEA软件;其中,若为多模块项目依......
  • 3.SpringCloud理解
    SpringCloud是一个用于构建分布式系统的开发工具集合,它基于SpringBoot提供了一套简化的微服务架构开发组件。SpringCloud提供了多个模块,包括服务注册与发现、配置管理、负载均衡、断路器、网关等,这些模块可以帮助开发者快速构建和部署分布式系统。服务注册与发现:通过使......
  • 实现读写分离SpringBoot+MyBatis+Druid
    实现读写分离SpringBoot+MyBatis+Druid1.读写分离概念理解读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程......
  • 在springboot项目种引入element组件
    1、保证vue的版本在3以上2、Win+R--打开命令行窗口(cmd)输入下面的命令,打开图形化界面:vueui3、打开我们创建的vue项目选择路径即可自主导入项目;4、安装element-ui的插件依赖5、查看项目中是否存在ok!......
  • 使用Java和Spring构建RESTful API
    Spring框架简介Spring是一个开源的Java应用程序框架,广泛用于构建企业级应用程序和RESTfulAPI。它提供了丰富的功能集,包括依赖注入、AOP(面向切面编程)、事务管理、Web开发和安全性等。以下是一些关键Spring模块:SpringCore:提供了核心功能,包括依赖注入和Bean管理。SpringBoot:简化了......
  • spring注解
    目录跨域@CrossOrigin跨域@CrossOrigin1:可加在类和方法上2:更推荐用过滤器......
  • spring boot中使用spring-data-jpa
    springbootPOM文件中加入依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>application.yml配置:spring:datasource:url:jdbc:oracle......