SpringBoot-依赖管理和自动配置

SpringBoot-依赖管理和自动配置

1.依赖管理

1.什么是依赖管理

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

SpringBoot-依赖管理和自动配置_第1张图片

SpringBoot-依赖管理和自动配置_第2张图片

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

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

SpringBoot-依赖管理和自动配置_第3张图片

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

SpringBoot-依赖管理和自动配置_第4张图片

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

SpringBoot-依赖管理和自动配置_第5张图片


<properties>
   <mysql.version>5.1.49mysql.version>
properties>

<dependency>
   <groupId>mysqlgroupId>
   <artifactId>mysql-connector-javaartifactId>
   
   
   
dependency>

SpringBoot-依赖管理和自动配置_第6张图片

2.starter 场景启动器

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

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

SpringBoot-依赖管理和自动配置_第7张图片

SpringBoot-依赖管理和自动配置_第8张图片

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

SpringBoot-依赖管理和自动配置_第9张图片

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

    SpringBoot-依赖管理和自动配置_第10张图片

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

SpringBoot-依赖管理和自动配置_第11张图片

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

SpringBoot-依赖管理和自动配置_第12张图片

  1. 自动配置 SpringMVC

SpringBoot-依赖管理和自动配置_第13张图片

  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);
        }
    }
}

SpringBoot-依赖管理和自动配置_第14张图片

SpringBoot-依赖管理和自动配置_第15张图片

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

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

SpringBoot-依赖管理和自动配置_第16张图片

3.如何修改默认配置

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

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

SpringBoot-依赖管理和自动配置_第17张图片

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

SpringBoot-依赖管理和自动配置_第18张图片

​ 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);
        }
    }
}

修改后,再次测试

SpringBoot-依赖管理和自动配置_第19张图片

2.resources\application.properties 配置大全

  • SpringBoot 项目最重要也是最核心的配置文件就是 application.properties,所有的框架配 置都可以在这个配置文件中说明,在开发中有不熟悉的配置可以参考

  • 地址: https://blog.csdn.net/pbrlovejava/article/details/82659702

SpringBoot-依赖管理和自动配置_第20张图片

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 , 看一下源码

SpringBoot-依赖管理和自动配置_第21张图片

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

SpringBoot-依赖管理和自动配置_第22张图片

SpringBoot-依赖管理和自动配置_第23张图片

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

1.基本说明

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

SpringBoot-依赖管理和自动配置_第24张图片

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

SpringBoot-依赖管理和自动配置_第25张图片

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

SpringBoot-依赖管理和自动配置_第26张图片

2.实例演示

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

SpringBoot-依赖管理和自动配置_第27张图片

SpringBoot-依赖管理和自动配置_第28张图片

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