序言
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. 核心注解解析
@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{...}
@Configuration就是 JavaConfig 形式的 Spring IoC 容器的配置类使用的那个 @Configuration,既然 SpringBoot 应用骨子里就是一个 Spring 应用,那么,自然也需要加载某个 IoC 容器的配置,而 SpringBoot 社区推荐使用基于 JavaConfig 的配置形式,所以,很明显,这里的启动类标注了 @Configuration 之后,本身其实也是一个 IoC 容器的配置类。比如:
@Configuration @EnableAutoConfiguration public class DemoConfiguration { ... }
@Configuration 标注的 DemoConfiguration 定义其实也是一个普通的 JavaConfig 形式的 IoC 容器配置类。
@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 容器。
@ComponentScan 的功能是自动扫描并加载符合条件的组件或 bean 定义,最终将这些 bean 定义加载到容器中。
开始实验
第3节 SpringBoot热启动
1. 热启动概述
- 热启动在项目开发中非常重要
- 使得SpringBoot对于编程调试能很好的进行支持
- 使得修改之后的程序能实时生效
2. 热启动配置
-
添加依赖配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
-
添加插件配置
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin>
-
添加应用配置
配置文件:application.yml
spring: devtools: restart: enabled: true #设置开启热部署 additional-paths: src/main/java #重启目录 exclude: WEB-INF/** thymeleaf: cache: false
-
启动测试
- 效果:修改程序代码,不需要重启项目,则展示最新程序编译效果