• SpringBoot-依赖管理和自动配置


    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

    
    <properties>
       <mysql.version>5.1.49mysql.version>
    properties>
    
    • 1
    • 2
    • 3
    • 4
    
    <dependency>
       <groupId>mysqlgroupId>
       <artifactId>mysql-connector-javaartifactId>
       
       
       
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    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);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    修改后,再次测试

    image-20220726231404750

    2.resources\application.properties 配置大全

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

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

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

    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

  • 相关阅读:
    Python金融领域人工智能教程
    【Python】解决CNN中训练权重参数不匹配size mismatch for fc.weight,size mismatch for fc.bias
    Redis常见命令
    规范的项目流程图怎么写
    华为云云耀云服务器L实例评测|Docker部署及应用
    产品百度百科如何创建?产品类百度百科怎么做?
    Origin绘制彩色光谱图
    效率神器Apifox_API 文档、API 调试、API Mock、API 自动化测试工具推荐
    为华生物NH2-PEG-NH2氨基聚乙二醇氨基的简介及应用说明
    git diff,stash,submodule,format-patch
  • 原文地址:https://blog.csdn.net/qq_44981526/article/details/126025226