Spring Boot | SpringBoo“开发入门“

news2024/11/23 6:30:12

目录 :

    • 1.SpringBoot的“介绍”
      • SpringBoot”概述” :
      • SpringBoot”简介“
      • SpringBoot的“优点”
    • 2. SpringBoot入门程序
      • 环境准备
      • 使用 “Maven”方式构建SpringBoot 项目
      • 使用“Spring Initializr”方式构建Spring Boot 项目
    • 3. “单元测试” 和“热部署”
      • 单元测试
      • 热部署
    • 4. Spring Boot”原理分析”
      • 4.1Spring Boot”依赖管理“
        • spring-boot-starter-parent 依赖
        • spring-boot-starter-web 依赖
      • Spring Boot自动配置
        • @SpringBootConfiguration
        • @EnableAutoConfiguration

作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习!

该文章参考学习教材为:
《Spring Boot企业级开发教程》 黑马程序员 / 编著
文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和感悟 ,最终成就了该文章

文章用于本人学习使用 , 同时希望能帮助大家。
欢迎大家点赞👍 收藏⭐ 关注💖哦!!!

(侵权可联系我,进行删除,如果雷同,纯属巧合)


1.SpringBoot的“介绍”

SpringBoot”概述” :

随着互联网的兴起,Spring 势如破竹地占据了Java领域“轻量级”开发王者之位。随着 Java语言的发展以及市场开发的需求,Spring推陈出新,推出了 全新的Spring Boot 框架Spring BootSpring家族 的一个 子项目,其 设计初衷是为了 简化Spring配置,从而让用户可以轻松构建独立运行的程序,并极大提高开发率

SpringBoot”简介“

  • SpringBoot框架出现之前JavaEE开发最常用的框架是SpringSpring框架开始于2003年,它是由罗德·约翰逊(Rod Johnson)创建的一个 轻量级开源框架Spring框架是为了 解决企业应用开发的复杂性创建 的,它的出现使得开发者无须开发重量级的Enterprise JavaBean( EJB ),而是通过 控制反转(IOC)面向切面编程(AOP) 的思想进行更轻松的企业应用开发取代了 EJB 臃肿低效的开发模式
  • 虽然Spring 框架是轻量级的,但 Spring的配置却是重量级Spring早期版本专注于 XML配置,开发一个程序需要 配置各种XML 配置文件为了简化开发,在Spring 2.x版本开始 引入少量的注解 : @Component、@Service 等。由于支持的注解不是很多且功能尚不完善,所以只能辅助使用
  • 随着 实际生产中敏捷开发需要,以及Spring 注解的大量出现功能改进,到了 Spring 4.x版本基本可以脱离XML配置文件进行项目开发多数开发者也逐渐感受到了基于注解开发便利,因此,在Spring 中使用注解开发逐渐占据了主流地位。与此同时,Pivotal 团队在原有Spring框架的基础上通过注解的方式进一步简化了Spring 框架的使用并基于Spring框架开发了全新的 SpringBoot框架,于 2014 年4月正式推出了 SpringBoot1.0 版本,同时在 2018 年3月又推出了 Spring Boot 2.0 版本。Spring Boot 2.x 版本在Spring Boot 1.x版本的基础上进行了诸多功能的改进和扩展,同时进行了大量的代码重构,所以选择合适的版也是非常重要的。 Spring Boot 3.02022年 11月24日正式发布 。
  • SpringBoot框架本身不提供Spring 框架核心特性以及扩展功能,只是用于 快速敏捷地开发新一代基于 Spring 框架应用,并且在开发过程中大量使用“约定优先配置”( convention over configuration )的思想来 摆脱 Spring 框架各种复杂手动配置,同时衍生出了 Java Config ( 取代传统XML配置文件Java 配置类)这种优秀的配置方式。也就是说, Spring Boot 并不是替代 Spring 框架解决方案,而是和 Spring框架紧密结合 用于 提升Spring开发者体验工具,同时Spring Boot 还集成了大量常用的 第三方库配置 ( 例如JacksonJDBCRedisMail 等)。使用 Spring Boot 开发程序时,几乎是 开箱即用 (out-of-the-box ),大部分 Spring Boot 应用只需少量配置就能完成相应的功能,这一特性进一步 促使开发者专注于业务逻辑实现
  • Spring Boot框架的出现恰好完美地 解决了怎么快速便捷地构建一个准生产环境的Spring应用 这些问题,同时其内部还 简化了许多常用第三方库配置,使得微服务开发更加便利

SpringBoot的“优点”

相较于传统的 Spring 框架Spring Boot 框架 具有以下 优点 :

    1. 可快速构建独立Spring 应用 :
      Spring Boot 是一个
      依靠大量注解
      实现 自动化配置全新框架。在构建 Spring 应用时,我们 添加 相应的场景 依赖Spring Boot 就会根据添加的场景依赖 自动进行配置,在 无须额外手动添加配置 的情况下快速构建出一个独立的Spring 应用
    1. 直接嵌入TomcatJettyUndertow服务器 ( 无须部署WAR文件 ,无需手动打包) :
      传统的 Spring 应用部署时,通常会将应用打成WAR 包形式并部署TomcatJettyUndertow服务器 ( 传统Spring项目要手动打包,而SpringBoot开发不需要手动打包 )中。SpringBoot 框架 内嵌TomcatJettyUndertow服务器SpringBoot自动将项目打包 (不用手动打包)并在项目运行部署到服务器中
    1. 通过 “依赖启动器” 简化构建配置 :
      SpringBoot 项目构建过程中,无须准备各种独立JAR 文件,只需在构建项目时根据开发场景需求选择对应的 依赖启动器starter,在引入的依赖启动器“starter”内部已经包含了对应开发场景所需的依赖,并会自动下载拉取相关JAR包
      例如,在Web 开发时,只需在构建项目时选择对应的 Web场景依赖 启动器 spring-boot-starter-webSpring Boot项目便会 自动导入spring-webmvcspring-webspring-boot-starter-tomcat等子依赖,并自动下载获取 Web 开发需要相关JAR 包
    1. 自动化配置 Spring和第三方库 :
      SpringBoot 充分考虑到与传统Spring 框架以及其他第三方库融合场景,在提供了各种 场景依赖启动器 的基础上,内部还默认 提供了各种 自动化配置类( 例如RedisAuto Configuration )。使用 SpringBoot开发项目时,一旦 引入了某个场景依赖启动器SpringBoot内部提供默认自动化配置类就会生效,开发者无须手动配置文件中进行相关配置 ( 除非开发者需要更改默认配置),从而极大减少了开发人员工作量提高了程序的开发效率
    1. 提供生产就绪功能 :
      SpringBoot 提供了一些 用于生产环境运行时特性,例如 指标监控检查外部化配置。其中,指标监控检查可以帮助运维人员运维期间监控项目运行情况外部化配置可以使运维人员快速、方便地进行外部化配置和部署工作
    1. 极少的代码生成极少的XML配置

      SpringBoot 框架内部已经实现了与Spring以及其他常用第三方库整合连接,并提供了默认最优化整合配置使用时基本上不需要额外生成配置代码XML配置文件。在需要自定义配置的情况下,SpringBoot 更加提倡使用Java config( Java配置类) 替换传统XML配置方式,这样更加方便查看和管理。

2. SpringBoot入门程序

环境准备

  • JDK环境 :
    SpringBoot 2.0及以上版本要求的JDK版本最低Java 8
  • 项目构建工具 :需要使用 MavenGradle 。如 : SpringBoot 2.1.3 要求 Maven ( 3.3 + )
    Gradle ( 4.4+ )
  • 开发工具 : IntelliJIDEA ,其在 智能代码助手重构各类版本工具( GitSVN 等)支持等方面的功能非常不错

使用 “Maven”方式构建SpringBoot 项目

  • 第一步添加SpringBoot依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.myh</groupId>
        <artifactId>chapter_01</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!-- "依赖启动器"的parent依赖 : 统一父类管理依赖  -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.3.RELEASE</version>
        </parent>
    
        <dependencies>
            <!-- 引入web开发依赖 (引入“web场景依赖”)   -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    
    </project>
    
  • 第二步编写主程序启动类

    package com.myh;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * "主程序类" 和有"操作代码的"包和文件要在同一个文件夹下
     */
    @SpringBootApplication //标记该类为"主程序启动类"
    public class ManualChapter01Application {
        //主程序启动方法
        public static void main(String[] args) {
            SpringApplication.run(ManualChapter01Application.class, args);
        }
    }
    

    上述代码中,@SpringBootApplication注解Spring Boot 框架核心注解,该注解用于表明ManualChapter01Application类Spring boot项目主程序启动类。然后调用SpringApplication对象的 .run( )方法启动主程序类

  • 第三步、创建一个 用于Web访问的Controller

    package com.myh.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController // 组合注解 : 该注解 = @ResponseBody + @Controller
    public class HelloController {
    
        @GetMapping("/hello")
        public String hello() {
            return "hello Spring Boot";
        }
    }
    

    运行 主程序启动类启动成功后,此时在浏览器上访问 http://localhost:8080/hello 。

使用“Spring Initializr”方式构建Spring Boot 项目

  • 除了可以使用Maven方式构建SpringBoot 项目外,还可以通过 Spring Initializr 方式快速构建 Spring Boot 项目从本质上说SpringInitializr 是一个 Web 应用,它提供了一个基本的项目结构,能够帮助我们快速构建一个基础Spring Boot 项目
    在这里插入图片描述

  • 具体的代码文件

    Chapter02Application.java :

    package com.myh.chapter_02;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Chapter02Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Chapter02Application.class, args);
        }
    }
    

    HelloController.java

    package com.myh.chapter_02.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController // 组合注解 : 该注解 = @ResponseBody + @Controller
    public class HelloController {
    
        @GetMapping("/hello2")
        public String hello() {
            return "hello Spring Boot2";
        }
    }
    

    pom.xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <groupId>com.myh</groupId>
        <artifactId>chapter_02</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>chapter_02</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>17</java.version>
        </properties>
        <dependencies>
    
            <!--   web模块依赖启动器    -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--   测试模块启动类    -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
                <version>RELEASE</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
    <!--    <build>-->
    <!--        <plugins>-->
    <!--            <plugin>-->
    <!--                <groupId>org.springframework.boot</groupId>-->
    <!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
    <!--            </plugin>-->
    <!--        </plugins>-->
    <!--    </build>-->
    
    </project>
    

    运行 主程序启动类启动成功后,此时在浏览器上访问 http://localhost:8080/hello2 。

3. “单元测试” 和“热部署”

单元测试

  • 实际开发中,每当 完成一个功能接口业务方法编写后,通常都会借助 单元测试 验证该功能是否正确Spring Boot 对项目的单元测试提供了很好的支持,在使用时,需要提前在项目的 pom.xml 文件中添加 spring-boot-starter-test 测试依赖启动器,可以通过相关注解 实现单元测试

     <!--   测试依赖启动器   -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
  • 在项目中添 加测试依赖启动器后,可以编写SpringBoot项目相关方法对应的单元测试。如果是使用Spring Initializr 方式搭建的 Spring Boot 项目,会在src.test.java 测试目录自动创建项目主程序启动类对应的 单元测试类。例如,chapter2 项目的 Chapter02ApplicationTests 是自动生成的“单元测试类” :

    在这里插入图片描述

  • Chapter02Application.java :

    package com.myh.chapter_02;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Chapter02Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Chapter02Application.class, args);
        }
    }
    

    pom.xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <groupId>com.myh</groupId>
        <artifactId>chapter_02</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>chapter_02</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>17</java.version>
        </properties>
        <dependencies>
    
            <!--   web模块依赖启动器    -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--   测试依赖启动器   -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
                <version>RELEASE</version>
                <scope>test</scope>
            </dependency>
    
        </dependencies>
    
        <!--   Maven打包工具插件   -->
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    HelloController.java :

    package com.myh.chapter_02.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController // 组合注解 : 该注解 = @ResponseBody + @Controller
    public class HelloController {
    
        @GetMapping("/hello2")
        public String hello() {
            return "hello Spring Boot(单元测试)";
        }
    }
    
    

    Chapter02ApplicationTests.java :

    package com.myh.chapter_02;
    
    import com.myh.chapter_02.controller.HelloController;
    import org.junit.jupiter.api.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class) //测试运行器,并加载SpringBoot测试注解
    @SpringBootTest //标记为类为"单元测试类",并加载项目的上下文环境ApplicationContext
    class Chapter02ApplicationTests {
    
    
        @Autowired
        private HelloController helloController;
    
        /**
         * 使用"单元测试"运行方法
         */
        @Test //单元测试方法
        public void helloController() {
            String hello = helloController.hello();
            System.out.println(hello);
        }
    
        //自动创建爱你的单元测试方法示例
        @Test
        void contextLoads() {
        }
    
    }
    
    

热部署

  • 开发过程中,通常会 一段业务代码不断地修改测试,在 修改之后往往 需要 重启服务,有些服务需要加载很久才能启动成功,这种不必要的重复操作极大降低了程序开发效率。为此,Spring Boot 框架专门提供了进行热部署依赖启动器,用于进行项目热部署,而 无须开发人员手动重启项目

  • 第一步导入“热部署依赖启动器 :

     <!--   “热部署”依赖启动器   -->
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
     </dependency>
    
    
  • 第二步IDEA工具热部署设置

    在这里插入图片描述

    在这里插入图片描述

    然后
    任意页面使用 组合键 : Ctrl + Shift + Alt + / 打开 Maintenance选择框,选中并打开 Registry页面如下图所示
    在这里插入图片描述

    在这里插入图片描述

  • 第三步热部署效果测试
    启动 chapter01项目,通过 浏览器访问“http://localhost:8080/hello”,具体如下图所示
    在这里插入图片描述

    页面原始输出 的内容是“hello Spring Boot”。

    为了测试配置的热部署是否有效,接下来在不关闭当前项目的情况下,将 HelloController类 中的 请求处理方法hello( )返回值修改为“ 你好,Spring Boot ”并保存,查看控制台信息会发现项目能够自动构建和编译,说明项目热部署生效。此时,关闭重新打开浏览器访问 :“http://localhost:8080/hello”,此时
    效果如下图 所示 :
    在这里插入图片描述

4. Spring Boot”原理分析”

  • 传统的Spring 框架实现一个Web 服务需要导入各种依赖JAR包,然后 编写对应的XML配置文件等;相较而言Spring Boot 显得更加方便快捷高效
  • 下面将分别针对 SpringBoot 框架依赖管理自动配置执行流程 进行 深入分析和讲解

4.1Spring Boot”依赖管理“

  • Spring Boot 入门程序中,项目 pom.xml 文件 有两个核心依赖,分别是 spring-boot-starter-parent ( 父项目依赖管理“启动器” ) 和 spring-boot-starter-web ( web场景依赖“启动器” )
spring-boot-starter-parent 依赖
<!-- 父项目依赖管理"启动器" : Spring Boot父项目依赖管理  -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>

上述代码中,将 spring-boot-starter-parent依赖 作为Spring Boot项目统一父项目依赖管理 ,并将项目 版本号统一为2.1.3.RELEASE,该版本号根据实际开发需求可以修改的。

进入并查看spring-boot-starter-parent底层源文件可以发现 spring-boot-starter-parent底层有一个父依赖 : spring-boot-dependencies核心代码如下

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-dependencies</artifactId>
 <version>2.1.3.RELEASE</version>
 <relativePath>../../spring-boot-dependencies</relativePath>
</parent>
.....

继续查看 spring-boot-dependencies 底层源文件核心代码 如下 :

<properties>
 <activemq.version>5.15.8</activemq.version>    
 ...
 <solr.version>7.4.0</solr.version>
 <spring.version>5.1.5.RELEASE</spring.version>
 <spring-amqp.version>2.1.4.RELEASE</spring-amqp.version>
 <spring-batch.version>4.1.1.RELEASE</spring-batch.version>
 <spring-cloud-connectors.version>2.0.4.RELEASE</spring-cloud-connectors.version>
 <spring-data-releasetrain.version>Lovelace-SR5</spring-data-releasetrain.version>
 <spring-framework.version>${spring.version}</spring-framework.version>
 <spring-hateoas.version>0.25.1.RELEASE</spring-hateoas.version>
 <spring-integration.version>5.1.3.RELEASE</spring-integration.version>
 <spring-kafka.version>2.2.4.RELEASE</spring-kafka.version>
 <spring-ldap.version>2.3.2.RELEASE</spring-ldap.version>
 <spring-plugin.version>1.2.0.RELEASE</spring-plugin.version>
 <spring-restdocs.version>2.0.3.RELEASE</spring-restdocs.version>
 <spring-retry.version>1.2.4.RELEASE</spring-retrdy.version>
 <spring-security.version>5.1.4.RELEASE</spring-security.version>
 <spring-session-bom.version>Bean-SR3</spring-session-bom.version>
 <spring-ws.version>3.0.6.RELEASE</spring-ws.version>
 <sqlite-jdbc.version>3.25.2</sqlite-jdbc.version>
 <statsd-client.version>3.1.0</statsd-client.version>
 <sun-mail.version>${javax-mail.version}</sun-mail.version>
 <thymeleaf.version>3.0.11.RELEASE</thymeleaf.version> 
 <tomcat.version>9.0.16</tomcat.version> 
 <unboundid-ldapsdk.version>4.0.9</unboundid-ldapsdk.version>
 <undertow.version>2.0.17.Final</undertow.version>
 <versions-maven-plugin.version>2.7</versions-maven-plugin.version>
 <webjars-hal-browser.version>3325375</webjars-hal-browser.version>
 <webjars-locator-core.version>0.35</webjars-locator-core.version>
</properties>

spring-boot-dependencies底层源文件可以看出,该文件通过 <properties>标签 对一些常用技术框架的依赖文件进行了 统一版本号管理,例如activemqspringtomcat 等,都有与 SpringBoot 2.1.3 版本相匹配版本,这也是pom.xml引入依赖文件 不需要标注依赖文件版本号原因

需要说明的是,如果pom.xml 引入的依赖文件不是spring-boot-starter-parent 管理的,那么在 pom.xml 引入依赖文件时,需要使用 <version>标签指定依赖文件版本号

spring-boot-starter-web 依赖
  • spring-boot-starter-parent父依赖启动器的主要作用是进行版本统一管理

    <!--   web模块依赖启动器    -->
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    
  • 查看 spring-boot-starter-web 依赖文件源码核心代码如下

    <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <version>2.1.3.RELEASE</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-json</artifactId>
          <version>2.1.3.RELEASE</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <version>2.1.3.RELEASE</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.hibernate.validator</groupId>
          <artifactId>hibernate-validator</artifactId>
          <version>6.0.14.Final</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>5.1.5.RELEASE</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.1.5.RELEASE</version>
          <scope>compile</scope>
        </dependency>
      </dependencies>
    
    

    上述代码可以发现,spring-boot-starter-web依赖启动器 的主要作用是 提供Web开发场景所需底层所有依赖文件,它对Web开发场景所需的依赖文件进行了统一管理

    正是如此,在pom.xml 中引入spring-boot-starter-web依赖启动器时,就可以实现Web场景开发,而 不需要额外导入Tomcat服务器以及其他 Web 依赖文件 等。当然,这些引入的依赖文件的版本号还是由spring-boot-starter-parent父依赖进行统一管理

  • 需要说明
    的是,Spring Boot 官方 并不是 针对所有场景开发的技术框架 都提供了依赖启动器,例如数据库操作框 : MyBatis阿里巴巴的Druid 数据源等,Spring Boot 官方没有提供对应的依赖启动器。为了充分利用Spring Boot 框架的优势,在Spring Boot官方没有整合这些技术框架的情况下,MyBatis、Druid等技术框架所在的开发团队主动与Spring Boot框架进行了整合,实现了各自的依赖启动器,例如 mybatis-spring-boot-starterdruid-spring-boot-starter 等。我们 在pom.xml 文件中引入这些第三方的依赖启动器时,切记要配置对应的版本号

Spring Boot自动配置

  • Spring Boot应用启动入口@SpringBootApplication注解 标注类 中的main( )方法@SpringBootApplication 能够扫描 Spring组件自动配置Spring Boot

  • @SpringBootApplication内部源码 分析

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration //标明该类为“配置类”
    @EnableAutoConfiguration //启动自动配置功能
    @ComponentScan(excludeFilters = {  //包扫描器
    		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
    		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication { 
       ...
    }
    
    

    上述源码可以看出,@SpringBootApplication注解 是一个 组合注解 ,包含 @SpringBootConfiguration
    @EnableAutoConfiguration@ComponentScan3个核心注解

@SpringBootConfiguration
  • @SpringBootConfiguration注解表示SpringBoot配置类 ,查看其源码核心代码 如下 :

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Configuration
    public @interface SpringBootConfiguration {
    }
    
    

    上述源码可以看出,@SpringBootConfiguration注解 内部有一个核心注解@Configuration
    该注解是 Spring 框架提供的,表示当前类为一个配置类(XML配置文件的注解表现形式),并
    可以被组件扫描器扫描。由此可见,@SpringBootConfiguration注解作用@Configuration注
    相同,都是标识一个可以被组件扫描器扫描配置类,只不过**@SpringBootConfiguration** 是被
    Spring Boot 进行了重新封装命名而已。

@EnableAutoConfiguration
  • @EnableAutoConfiguration注解表示 开启自动配置功能,该注解是Spring Boot框架 最重要
    的注解
    ,也是实现自动化配置注解。同样该注解的核心代码如下

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @AutoConfigurationPackage
    @Import(AutoConfigurationImportSelector.class)
    public @interface EnableAutoConfiguration {
    
    	String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
    
    	/**
    	 * Exclude specific auto-configuration classes such that they will never be applied.
    	 * @return the classes to exclude
    	 */
    	Class<?>[] exclude() default {};
    
    	/**
    	 * Exclude specific auto-configuration class names such that they will never be
    	 * applied.
    	 * @return the class names to exclude
    	 * @since 1.3.0
    	 */
    	String[] excludeName() default {};
    
    }
    
    

    上述源码可以看出,@EnableAutoConfiguration 注解是一个 组合注解,它主要包括有
    @AutoConfigurationPackage@lmport两个核心注解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1546164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行单元化架构体系介绍

1.背景 自2018年以来&#xff0c;受“华为、中兴事件”影响&#xff0c;我国科技受制于人的现状对国家稳定和经济发展都提出了严峻考验。目前我国IT架构体系严重依赖国外产品&#xff0c;金融行业尤其明显。大部分传统银行的关键账务系统都架设在IBM的大型机、小型机之上&…

EPSON的实时时钟模块RX8010SJ丰富的定时功能及超低功耗特性

温控器是用于控制温度的设备&#xff0c;目前市面上的温控器用于控制地暖空调、热水器、中央新风系统等设备。随着智能家居理念深入人心&#xff0c;人们也期望温控器不仅能控得"准”&#xff0c;还能控得“智能”。为了实现智能控制&#xff0c;温控器一般需要实时时钟模…

【Vue 页面+flex布局 】一行内显示4个元素,超出4个换行,每一行的最后一个去掉marginRight属性

问题 一行展示4个&#xff0c;每个元素之间的margin-right 为20px&#xff0c;导致最右侧没有和上面的输入框对齐 实现效果 修改 正确思路&#xff1a; 一行展示4个&#xff0c;前三个元素之间的margin-right 为20px&#xff0c;最后一个元素margin-right 设置为 0px 代码 …

【198】Java8编写Main程序场景下引入log4j2的例子

场景 有些情况下&#xff0c;需要程序员编写非服务器程序&#xff0c;或者编写不使用 Springboot 框架的程序。这个时候如果需要生成日志&#xff0c;就要采用本文的方法来引入 log4j2 。本文的例子还涉及了在程序打包的时候&#xff0c;如何处理依赖jar包的问题。 例子 下面…

钢结构行业的MES需求特点解析

导 读 ( 文/ 973 ) 钢结构行业作为重要的建筑材料供应商和施工服务提供商&#xff0c;对于生产过程的高效管理和质量控制有着严格要求。其中制造执行系统&#xff08;MES&#xff09;在钢结构行业中扮演着关键的角色。本文将探讨钢结构行业中MES的需求特点&#xff0c;包括…

sdrangel下载与部署for windows

下载 https://github.com/f4exb/sdrangel 在其目录下新建build文件 部署 打开cmake软件,修改如下 点击下面Configure,选择对应vs版本 点击finish,按照提示报错信息配置即可 ARCH_OPT=SSE4_2 DEBUG_OUTPUT

数据库事务补充和存储引擎

一、数据库事物补充 1.1 事务之间的相互影响 1.2 Mysql事务隔离级别 1.2.1 read uncommitted 1.2.2 read committed 1.2.3 repeatable read&#xff08;重读读取&#xff09; 1.2.4 serializable&#xff08;串行化&#xff09; 1.3 事务的作用范围 1.3.1 查询全局事务…

智慧医疗包括哪些方面?智慧医疗发展前景如何?

近年来&#xff0c;随着云计算、物联网&#xff08;internet of things&#xff0c;IOT&#xff09;、移动互联网、大数据、人工智能&#xff08;artificial intelligence&#xff0c;AI&#xff09;、5G网络、区块链等新一代信息技术的逐步成熟和广泛应用&#xff0c;信息化已…

设计模式之工厂方法模式精讲

工厂方法模式又叫虚拟构造函数&#xff08;Virtual Constructor&#xff09;模式或者多态性工厂&#xff08;Polymorphic Factory&#xff09;模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口&#xff0c;将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…

【哈希专题】【蓝桥杯备考训练】:星空之夜、模拟散列表、字符串哈希、四平方和、扫雷【已更新完成】

目录 1、星空之夜&#xff08;usaco training 5.1&#xff09; 2、模拟散列表&#xff08;模板&#xff09; 3、字符串哈希&#xff08;模板&#xff09; 4、四平方和&#xff08;第七届蓝桥杯省赛C A组/B组 & JAVA B组/C组&#xff09; 5、扫雷&#xff08;Google Ki…

【学习】软件测试行业未来的发展趋势预测

近年来&#xff0c;随着中国数字经济的蓬勃发展&#xff0c;软件测试行业也迎来了新的春天。从早期的手工测试到自动化测试&#xff0c;再到持续集成和持续交付&#xff0c;中国的软件测试行业经历了快速的发展和变革。各行各业均对软件测试提出了更高的要求&#xff0c;尤其在…

基于java+springboot+vue实现的大学生二手物品交易商城(文末源码+Lw+ppt)23-329

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这…

暴雨讲堂:AI时代第五代英特尔CPU能做什么?

如果把科技圈比作娱乐圈&#xff0c;那么这两年的顶流一定是AI。2023年&#xff0c;世人见证了ChatGPT在全球范围内的大火&#xff0c;以生成式AI为代表的新一轮人工智能应用问世&#xff0c;改变了人工智能&#xff08;AI&#xff09;技术与应用的发展轨迹&#xff0c;并开始在…

展馆人数统计显示屏的功能分析

展馆人数统计显示屏是展览馆、博物馆、商场等公共场所常见的一种设备&#xff0c;它能够实时显示当前场馆内的人数信息&#xff0c;为管理者和游客提供重要参考。展馆人数统计显示屏的功能分析是对这一设备的作用、特点和优势进行深入剖析&#xff0c;有助于更好地了解其在实际…

音视频处理 - 音频概念详解,码率,采样率,位深度,声道,编码

1. 音频采样 与视频不同&#xff0c;音频的最小单位不是一帧&#xff0c;而是一个采样。 采样是当前一刻声音的声音样本&#xff0c;样本需要经过数字转换才能存储为样本数据。 真实声音是连续的&#xff0c;但是在计算机中&#xff0c;声音是离散且均匀的声音样本。 2. 位深…

【倪琴仲尼式-雷伴】全新倪诗韵精品杉木古琴

试音中的用弦&#xff1a;梦音&#xff0c;视频录音无任何处理&#xff0c;所见即所得。 现琴比照片更好看。倪琴吊牌、琴额后面的编码和倪琴官网上的序列号是一一对应的&#xff0c;可查。 雷伴&#xff0c;“伴”字取意陪伴、相伴、依随。栗壳色&#xff0c;纯鹿角霜生漆工艺…

反射率光纤光谱仪检测汽车后视镜反射率

反射率光纤光谱仪是一种用于测量材料表面反射率的精密仪器&#xff0c;它通过光纤传输光信号&#xff0c;并利用光谱仪进行分析&#xff0c;以确定材料的光学特性。反射率光纤光谱仪的工作原理基于相对反射率的计算&#xff0c;它涉及到光源、光纤、光谱仪等关键组件。 后视镜能…

使用ES5进行win10系统封装

一、概述 为什么那时候会折腾这个呢&#xff0c;因为我平时用的一般是PE或者直接刻录安装系统&#xff0c;但是这样类似于每次安装完系统后都需要进行一些优化设置&#xff0c;比如电源选项、资源管理器设置、办公软件安装等等&#xff0c;我也听说过ghost但是没有实际用过不过…

Apache Hive的部署与体验

一、Apache Hive概述 什么是分布式SQL计算&#xff1f; 以分布式的形式&#xff0c;执行SQL语句&#xff0c;进行数据统计分析。Apache Hive是做什么的&#xff1f; 很简单&#xff0c;将SQL语句翻译成MapReduce程序&#xff0c;从而提供用户分布式SQL计算的能力。传统MapRed…

[2023] 14届

1.日期统计 题意 1.日期统计 - 蓝桥云课 (lanqiao.cn) 思路 用dfs扫 对每一个位进行限制 花了一个小时 注意把答案枚举出来 对应一下看到底对不对 code #include<iostream> #include<cstdio> #include<stack> #include<vector> #include<al…