SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁

前言
本篇博文是关于SpringBoot 依赖管理和自动配置,希望能够帮助到您

个人主页:晨犀主页
个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力
欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦

文章目录

  • SpringBoot 依赖管理和自动配置
    • 依赖管理
      • 什么是依赖管理
      • 修改自动仲裁/默认版本号
    • starter 场景启动器
      • starter 场景启动器基本介绍
      • 官方提供的starter
        • 介绍
      • 第三方starter
    • 自动配置
      • 自动配置基本介绍
      • SpringBoot 自动配置了哪些?
      • 如何修改默认配置
        • 如何修改默认扫描包结构
        • resources\application.properties 配置大全
      • 自动配置遵守按需加载原则
        • 基本说明
        • 实例演示
    • 总结

SpringBoot 依赖管理和自动配置

依赖管理

什么是依赖管理

  1. spring-boot-starter-parent 还有父项目, 声明了开发中常用的依赖的版本号

  2. 并且进行自动版本仲裁, 即如果程序员没有指定某个依赖jar 的版本,则以父项目指定的版本为准

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

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

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第1张图片

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

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第2张图片

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

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

	 

版本仲裁就是比如他里面有个父项目,配置了大多数可能需要的jar,默认指定了每一个jar版本。如果本工程配置了就采用本工程的配置,没有就找到父项目的配置。

starter 场景启动器

starter 场景启动器基本介绍

  1. 开发中我们引入了相关场景的starter,这个场景中所有的相关依赖都引入进来了,比如我们做web 开发引入了,该starter 将导入与web 开发相关的所有包
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

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

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第3张图片

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第4张图片

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

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第5张图片

官方提供的starter

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

介绍

  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 依赖管理和自动配置---带你了解什么是版本仲裁_第6张图片

第三方starter

  1. SpringBoot 也支持第三方starter。
  2. 第三方starter 不要从spring-boot 开始,因为这是官方spring-boot 保留的命名方式的。第三方启动程序通常以项目名称开头。例如,名为thirdpartyproject 的第三方启动程序项目通常被命名为thirdpartyproject-spring-boot-starter。
  3. 也就是说:xxx-spring-boot-starter 是第三方为我们提供的简化开发的场景启动器。

自动配置

自动配置基本介绍

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

    2.简单回顾以前SSM 整合的配置.

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第7张图片

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第8张图片

SpringBoot 自动配置了哪些?

  1. 自动配置Tomcat
    SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第9张图片

  2. 自动配置SpringMVC

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第10张图片

  1. 自动配置Web 常用功能: 比如字符过滤器, 提示: 通过获取ioc 容器,查看容器创建的组件来验证,

修改quickstart\src\main\java\com\nlc\springboot\MainApp.java

@SpringBootApplication
public class MainApp {

    public static void main(String[] args) {

        //启动springboot应用程序/项目
        ConfigurableApplicationContext ioc =
                SpringApplication.run(MainApp.class, args);


        //如何查看容器中注入的组件
        String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println("beanDefinitionName--" + beanDefinitionName);
        }
    }
}

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第11张图片

-------更加直接查看的方式debug-------

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第12张图片

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

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

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第13张图片

如何修改默认配置

如何修改默认扫描包结构

  1. 需求:要求能扫描com.nlc包下的HiController.java 应该如何处理?
  2. 创建: quickstart\src\main\java\com\nlc\HiController.java, 并测试,这时是访问不到的.
@Controller
public class HiController {

    //返回hi,springboot
    @RequestMapping("/hi")
    @ResponseBody
    public String hi() {
        return "hi~, SpringBoot";
    }
}
  1. 修改MainApp.java, 增加扫描的包, 并完成测试.
// 直接在SpringBootApplication 注解后指定扫描包名
@SpringBootApplication(scanBasePackages = "com.nlc")
//@SpringBootApplication(scanBasePackages = "com.nlc")指定扫描哪个包及其子包
public class MainApp {
    //.....
}

resources\application.properties 配置大全

  • SpringBoot 项目最重要也是最核心的配置文件就是application.properties,所有的框架配置都可以在这个配置文件中说明
  • 地址: application.properties配置大全

因为配置代码篇幅过长,影响本篇博文整体阅读,因此单独发表一篇文章方便大家观看,希望能够帮助到您SpringBoot 自动配置–常用配置

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

基本说明

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

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第14张图片

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

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第15张图片

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

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第16张图片

实例演示

以MultipartProperties , MultipartAutoConfiguration 和application.properties 来说明,用debug的形式查看

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第17张图片

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁_第18张图片

总结

  1. 版本仲裁:如果程序员没有指定某个依赖jar 的版本,则以父项目指定的版本为准
  2. 修改pom.xml 配置时, 需要刷新Maven ,否则无法识别
  3. SpringBoot 支持第三方starter。第三方starter命名 不从spring-boot 开始,因为官方starter命名以spring-boot 开头。

热门专栏推荐
SpringBoot篇
Spring Boot介绍–快速入门–约定优于配置
SpringBoot 自动配置–常用配置

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力

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