• 第02章 SpringBoot概述


    序言

    1.内容介绍

    ​ 本章介绍了SpringBoot的核心功能、优点、特征,同时对SpringBoot项目的构建、核心注解的使用进行一 一实战演练,为了提升日常SpringBoot项目的开发效率,引入了SpringBoot热启动的配置。

    2.理论目标

    • 掌握SpringBoot的特点
    • 掌握SpringBoot的优点
    • 掌握SpringBoot项目目录结构

    3.实践目标

    • 熟练创建SpringBoot项目
    • 熟练编写控制层Controller
    • 熟练进行SpringBoot热启动配置,提升调试项目的效率

    4.实践案例

    • SpringBoot项目构建
    • SpringBoot核心注解实战

    5. 内容目录

    • 1.SpringBoot初识
    • 2.SpringBoot初体验
    • 3.SpringBoot热启动

    第1节 SpringBoot初识

    1. 什么是SpringBoot?

    • 随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java 的开发显得格外的笨重,繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。
    • 在上述环境下,Spring Boot 应运而生。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。
    • 使用 Spring Boot 很容易创建一个独立运行(运行 jar,内嵌 Servlet 容器)、准生产级别的基于 Spring 框架的项目,使用 Spring Boot 你可以不用或者只需要很少的 Spring 配置。
    • Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

    2. SpringBoot核心功能

    • 独立运行的 Spring 项目
      • Spring Boot 可以以 jar 包的形式独立运行,运行一个 Spring Boot 项目只需通过 java–jar xx.jar 来运行。
    • 内嵌 Servlet 容器
      • Spring Boot 可选择内嵌 Tomcat、Jetty 或者 Undertow,这样我们无须以 war 包形式部署项目。
    • 提供 starter 简化 Maven 配置
      • Spring 提供了一系列的 starter pom 来简化 Maven 的依赖加载,例如,当你使用了spring-boot-starter-web 时,会自动加入如图 1 所示的依赖包。
    • 自动配置 Spring
      • Spring Boot 会根据在类路径中的 jar 包、类,为 jar 包里的类自动配置 Bean,这样会极大地减少我们要使用的配置。当然,Spring Boot 只是考虑了大多数的开发场景,并不是所有的场景,若在实际开发中我们需要自动配置 Bean,而 Spring Boot 没有提供支持,则可以自定义自动配置。
    • 准生产的应用监控
      • Spring Boot 提供基于 http、ssh、telnet 对运行时的项目进行监控。
    • 无代码生成和 xml 配置
      • Spring Boot 的神奇的不是借助于代码生成来实现的,而是通过条件注解来实现的,这是 Spring 4.x 提供的新特性。Spring 4.x 提倡使用 Java 配置和注解配置组合,而 Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。

    3. SpringBoot优点

    • 可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
    • 内嵌Tomcat或Jetty等Servlet容器;
    • 提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
    • 对主流开发框架的无配置集成。
    • 项目可独立运行,无须外部依赖Servlet容器。
    • 提供运行时的应用监控。
    • 极大地提高了开发、部署效率。
    • 与云计算的天然集成。

    4. SpringBoot缺点

    • 版本迭代速度很快,一些模块改动很大。

    • 由于不用自己做配置,报错时很难定位。

    第2节 SpringBoot初体验

    SpringBoot 是 Spring 框架对“约定优先于配置(Convention Over Configuration)”理念的最佳实践的产物,一个典型的 SpringBoot 应用本质上其实就是一个基于 Spring 框架的应用.

    1. 创建SpringBoot项目

    需求:Idea构建项目

    • 选择“create new project”入口,选择"Spring Initializr"

    • 选择“Spring Initializr”,Next(输入项目名、包名,选择JDK版本)

    • 选择"Dependencies"
      • Web --> Spring Web
      • Template Engines --> Thymeleaf
      • 选择SpringBoot2.4.5版本

    • 选择项目存放位置,最后点击"finish"

    2. 项目结构说明

    • src/main/java:程序开发以及主程序入口
      • SpringbootHelloApplication:是应用程序的主入口
    • src/main/resources:配置文件
      • static:静态资源文件目录(css、images、js等)
      • templates:自定义的html模板文件
    • src/test/java:单元测试程序
      • SpringbootHelloApplicationTests:自动生成的单元测试程序
    • pom.xml:
      • :是应用程序模型的版本
      • :SpringBoot父版本的配置信息
      • :包名
      • :项目名
      • :版本号
      • :应用名
      • :项目的描述信息
      • :项目的jdk版本、编码版本等配置信息
      • :项目依赖信息
        • spring-boot-starter-web:web模块依赖
        • spring-boot-starter-test:测试模块依赖
        • spring-boot-starter-thymeleaf:模板依赖
      • :插件的配置信息

    3. 自定义HelloController实战

    • 创建子目录controller

    • 在目录controller中,创建HelloController.java文件

    • 编写HelloController.java程序

       

      @RestController public class HelloController { @RequestMapping(value="/hello") public String index(){ return "Hello World!"; } }

      @RestController:说明Controller里面的方法都以json格式输出

      @RequestMapping:标注url的API的请求

    • 启动主程序,并使用PostMan进行测试

    4. 核心注解解析

    4.1 @SpringBootApplication

    @SpringBootApplication 是一个“三体”结构,实际上它是一个复合 Annotation:

     
    

    @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Configuration @EnableAutoConfiguration @ComponentScanpublic @interface SpringBootApplication{...}

    虽然它的定义使用了多个 Annotation 进行元信息标注,但实际上对于 SpringBoot 应用来说,重要的只有三个 Annotation,而“三体”结构实际上指的就是这三个 Annotation:

     
    

    @Configuration @EnableAutoConfiguration @ComponentScan

    每次都写三个 Annotation 显然过于繁琐,所以写一个 @SpringBootApplication 这样的一站式复合 Annotation

     
    

    @SpringBootApplication SpringBootApplication{...}

    4.2 @Configuration

    @Configuration就是 JavaConfig 形式的 Spring IoC 容器的配置类使用的那个 @Configuration,既然 SpringBoot 应用骨子里就是一个 Spring 应用,那么,自然也需要加载某个 IoC 容器的配置,而 SpringBoot 社区推荐使用基于 JavaConfig 的配置形式,所以,很明显,这里的启动类标注了 @Configuration 之后,本身其实也是一个 IoC 容器的配置类。比如:

     
    

    @Configuration @EnableAutoConfiguration public class DemoConfiguration { ... }

    @Configuration 标注的 DemoConfiguration 定义其实也是一个普通的 JavaConfig 形式的 IoC 容器配置类。

    4.3 @EnableAutoConfiguration

    @EnableAutoConfiguration 也是借助 @Import 的帮助,将所有符合自动配置条件的 bean 定义加载到 IoC 容器.

    @EnableAutoConfiguration 作为一个复合 Annotation,其自身定义关键信息如下:

     
    

    @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration {...}

    最关键是 @Import(EnableAutoConfigurationImportSelector.class),它借助 EnableAutoConfigurationImportSelector,@EnableAutoConfiguration 可以帮助 SpringBoot 应用将所有符合条件的 @Configuration 配置都加载到当前 SpringBoot 创建并使用的 IoC 容器。

    4.4 @ComponentScan

    @ComponentScan 的功能是自动扫描并加载符合条件的组件或 bean 定义,最终将这些 bean 定义加载到容器中。

    开始实验

    第3节 SpringBoot热启动

    1. 热启动概述

    • 热启动在项目开发中非常重要
    • 使得SpringBoot对于编程调试能很好的进行支持
    • 使得修改之后的程序能实时生效

    2. 热启动配置

    • 添加依赖配置

       

      org.springframework.boot spring-boot-devtools true

    • 添加插件配置

       

      org.springframework.boot spring-boot-maven-plugin true

    • 添加应用配置

      配置文件:application.yml

       

      spring: devtools: restart: enabled: true #设置开启热部署 additional-paths: src/main/java #重启目录 exclude: WEB-INF/** thymeleaf: cache: false

    • 启动测试

      • 效果:修改程序代码,不需要重启项目,则展示最新程序编译效果

  • 相关阅读:
    Linux 文件锁的原理、实现和应用
    浅谈剩余电流动作继电器在电动伸缩门的应用
    springboot整合sharding-jdbc实现分库分表详解
    【CVPR2022 点云3D检测SOTA】SoftGroup for 3D Instance Segmentation on Point Clouds
    【web-代码审计】(14.5)PHP
    【一起学Java-第八篇】Java语言类的特性详解
    预测性人工智能会彻底改变SIEM行业吗?
    RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像
    MySQL安装validate_password_policy插件
    Nature Plants|植物基因组测序20年回顾与展望:三代HiFi基因组时代
  • 原文地址:https://blog.csdn.net/a1234556667/article/details/126447076