SpringBoot-依赖管理和自动配置

  |   0 评论   |   0 浏览

SpringBoot-依赖管理和自动配置

1.依赖管理

1.什么是依赖管理

  1. spring-boot-starter-parent 还有父项目, 声明了开发中常用的依赖的版本号
  2. 并且进行 自动版本仲裁 , 即如果程序员没有指定某个依赖 jar 的版本,则以父项目指 定的版本为准

image-20220726214145276

image-20220726214411294

2.修改自动仲裁/默认版本号

  1. 需求说明: 将 SpringBoot mysql 驱动修改成 5.1.49

image-20220726214814712

  1. 查看 spring-boot-dependencies.pom 里面规定当前依赖的版本对应的 key , 这里是 mysql.version

image-20220726214955598

  1. 修改 pom.xml 重写配置, 当更新 Maven 时,就依赖到新的 mysql 驱动.

image-20220726215349073

<!--这里我们可以指定mysql.version-->
<properties>
   <mysql.version>5.1.49</mysql.version>
</properties>
<!--我们自己指定mysql/驱动版本- 修改版本仲裁
 1. 方式1:显示的导入mysql依赖, 并明确的指定<version>
 2. 方式2.在自己的pom.xml文件中, 在<properties> 中指定mysql的key
 形如:
    <properties>
    <mysql.version>5.1.49</mysql.version>
    </properties>
 3. 为什么可以达到修改版本仲裁: 根据依赖就近优先原则.
 -->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <!--<version>5.1.49</version>-->
   <!-- <mysql.version>8.0.26</mysql.version> 命名方式和springboot自动仲裁的命名方式一样,因此这里可以省略-->
   <!--<version>${mysql.version}</version>-->
</dependency>

image-20220726222113008

2.starter 场景启动器

1.starter 场景启动器基本介绍

  1. 开发中我们引入了相关场景的 starter,这个场景中所有的相关依赖都引入进来了,比如 我们做 web 开发引入了,该 starter 将导入与 web 开发相关的所有包

image-20220726215906738

image-20220726215940952

  1. 依赖树 : 可以看到 spring-boot-starter-web ,帮我们引入了 spring-webmvc,spring-web 开发模块,还引入了 spring-boot-starter-tomcat 场景,spring-boot-starter-json 场景,这些 场景下面又引入了一大堆相关的包,这些依赖项可以快速启动和运行一个项目,提高开发 效率

image-20220726220114714

  1. 所有场景启动器最基本的依赖就是 spring-boot-starter , 前面的依赖树分析可以看到,这个依赖也就是 SpringBoot 自动配置的核心依赖

    image-20220726220259855

2.官方提供的 starter

1.地 址

https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

2.介绍

  1. 在开发中我们经常会用到 spring-boot-starter-xxx ,比如 spring-boot-starter-web,该场景是用作 web 开发,也就是说 xxx 是某种开发场景。
  2. 我们只要引入 starter,这个场景的所有常规需要的依赖我们都自动引入。
  3. SpringBoot2 支 持 的 所 有 场 景 如 下 : https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

image-20220726220604649

3.第三方 starter

  1. SpringBoot 也支持第三方 starter
  2. 第三方 starter 不要从 spring-boot 开始,因为这是官方 spring-boot 保留的命名方式的。 第三方启动程序通常以项目名称开头。例如,名为 thirdpartyproject 的第三方启动程序项 目通常被命名为 thirdpartyproject-spring-boot-starter。

​ 3. 也就是说:xxx-spring-boot-starter 是第三方为我们提供的简化开发的场景启动器

3.自动配置

1.自动配置基本介绍

  1. SSM 整合时,需要配置 Tomcat 、配置 SpringMVC、配置如 何扫描包、配置字符过滤器、配置视图解析器、文件上传等[如图],非常麻烦。而在 SpringBoot 中,存在自动配置机制,提高开发效率

2.SpringBoot 自动配置了哪些?

  1. 自动配置 Tomcat

  1. 自动配置 SpringMVC

image-20220726225836464

  1. 自动配置 Web 常用功能: 比如字符过滤器, 提示: 通过获取 ioc 容器,查看容器创 建 的 组 件 来 验 证 , 修 改src\main\java\com\llp\MainApp.java
@SpringBootApplication
public class MainApp {

    public static void main(String[] args) {
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);
        String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
        //查看容器里面的组件名称
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }
}

image-20220726230053933

image-20220726230350986

  1. 自动配置 : 默认扫描包结构 !!! , 官方文档 :

https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.structuring-your-code.using-the-default-package

image-20220726221112774

3.如何修改默认配置

1.如何修改默认扫描包结构

  1. 需求:要求能扫描 com.llp包下的 HelloController.java 应该如何处理?
  2. 修改HelloController.java所在包的位置,故意让其不在主启动类所在的包及其子包下

image-20220726230720276

进行测试我们发现是不能访问到HelloController的,因为SpringBoot默认的包扫描是主启动类所在包及其子包,而HelloController.java不在扫描的包内,无法注入到Spring容器中,SpringMVC也没有相关的路径映射配置因此是找不到的。由此引入一个问题,如何修改SpringBoot默认的包扫描机制呢

image-20220726230755092

​ 3. 修改 MainApp.java, 增加扫描的包, 并完成测试

// 直接在 SpringBootApplication 注解后指定扫描的包,在该报下的组件会被注入到spring容器中
@SpringBootApplication(scanBasePackages = {"com"})
public class MainApp {

    public static void main(String[] args) {
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);
        String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }
}

修改后,再次测试

image-20220726231404750

2.resources\application.properties 配置大全

image-20220727220759865

3.resources\application.properties 修改配置

● 各 种 配 置 都 有 默 认 , 可 以 在 resources\application.properties 修 改 , application.properties 文件我们可以手动创建

#默认 server.port=8080
server.port=10000
#比如: 默认 spring.servlet.multipart.max-file-size=1MB #该属性可以指定 springboot 上传文件大小的限制
# 默认配置最终都是映射到某个类上,比如这里配置会映射到 MultipartProperties
# 把光标放在该属性,ctrl+鼠标左键 就可以定位该配置映射到的类
spring.servlet.multipart.max-file-size=10MB

4.resources\application.properties 自定义配置

● 还可以在 properties 文件中自定义配置,通过@Value("${}")获取对应属性值

#application.properties 文件 my.website=https://www.baidu.com
//某个 Bean 
@Value("${my.website}") private String bdUrl;

4.SpringBoot 在哪配置读取 application.properites

1、打开 ConfigFileApplicationListener.java , 看一下源码

image-20220726232041688

2、测试, 如果我们把 application.properties 放在 resources\config 目录下, 你会发现依然 是管用的

image-20220727225410847

image-20220727225441161

5.自动配置 遵守按需加载原则

1.基本说明

1.自动配置遵守按需加载原则:也就是说,引入了哪个场景 starter 就会加载该场景关联的 jar 包,没有引入的 starter 则不会加载其关联 jar

image-20220727231259762

2.SpringBoot 所 有 的 自 动 配 置 功 能 都 在 spring-boot-autoconfigure 包 里 面

3.在 SpringBoot 的 自 动 配 置 包 , 一 般 是 XxxAutoConfiguration.java, 对 应 XxxxProperties.java, 如图

image-20220727231320940

2.实例演示

  1. 以 MultipartProperties , MultipartAutoConfiguration 和 application.properties 来说明

image-20220727231333488

image-20220727231339890


标题:SpringBoot-依赖管理和自动配置
作者:llp
地址:https://blog.llp1110.cn/articles/2022/08/09/1660050935339.html