Spring 全家桶之 Spring Boot 2.6.4(一)- Quickstart

2022-08-23 16:01:40 浏览数 (1)

一、Spring Boot Quickstart

  首先Spring Boot是一个框架,基于Spring框架,用来简化Spring应用的开发,其次Spring Boot的口号是是约定大于配置,这是因为使用基于Spring、Spring MVC开发 Web 项目有很多缺点,例如非常多的配置文件、繁琐的部署流程以及复杂第三方集成等。Spring Boot可以化繁为简,非常快速的创建以及部署一个产品级的应用。

Spring Boot 可以:

  • 快速创建独立运行的Spring项目以及与主流框架集成
  • 使用嵌入式的Servlet容器如Tomcat,引用不需要达成War包
  • 有非常多的starters实现自动依赖与版本控制
  • 大量的自动配置,也可以自定义配置
  • 应用运行时监控

1.1 - Spring Boot 快速创建及部署应用

Spring Boot 快速创建应用

使用IDEA的Spring Initializr 可以快速创建Spring Boot工程

在quickstart包下新建controller包,增加LilithController

代码语言:javascript复制
@RestController
public class LilithController {
    
    @RequestMapping("/lilith")
    public String lilith(){
        return "Hello Lilith!";
    }
    
}

运行qickstart包下的QuickstartApplication

可以看出Tomcat已经在8080端口重新启动,并且征程Application启动。在浏览器输入 localhost:8080/lilith

浏览器显示了在代码中返回的信息。

相比通过Spring、Spring MVC创建项目需要大量的Spring配置以及Spring MVC配置,Spring Boot只需要添加一个spring-boot-starter-web依赖以及一个Controller类就可以完成,无需任何配置。

Spring Boot快速部署应用

Spring Boot不仅可以快速创建应用,还可以快速部署应用

点击右侧maven侧边栏中的Lifecycle下的package命令即可对应用进行打包

在终端进行项目应用下的target目录,使用java -jar运行JAR包

代码语言:javascript复制
java -jar spring-boot-quickstark-0.0.1-SNAPSHOT.jar

同样可以成功启动应用

Spring Boot工程目录介绍

使用Spring Initializr创建的项目中主要包含了

  • XxxxApplication:主程序,项目启动入口
  • resource:类路径下保存配置文件或者HTML资源等
    • static:保存所有静态资源,如css、js、images、icon等
    • template:保存html或者ftl模版页面,支持freemarker、thymeleaf等模版引擎
    • application.properties:Spring Boot应用配置文件,可以修改默认配置
  • XxxApplicationTests:自动生成的主程序测试类,其他测试类可以通过继承该类来使用Spring Test

二、Spring Boot 原理分析

2.1 - 版本及依赖管理

创建项目时选择了spring-boot-starter-web,该依赖并没有指定版本号,Spring Boot是如何确定依赖的版本号的?

pom.xml文件中唯一有版本号的地方是parent标签中的内容,导入了一个spring-boot-starter-parent作为父依赖,而spring-boot-starter-parent的父依赖是spring-boot-dependencies。

spring-boot-dependencies在properties标签中定义了很多依赖的版本号

再看pom.xml文件中dependency标签下的spring-boot-starter-web又依赖的哪些包?

依赖了Spring MVC、Spring Boot Tomcat Starter以及一些其他的starter,导入了web模块正常运行所需要的组件。

什么是Starters? Starters即启动器,是Spring Boot将功能场景组成的,项目中只要引入一个Starters,相关依赖都会导入进来。

查看Spring Boot官方文档中Starters

2.2 - 自动配置/主程序类

主程序类上的@SpringBootApplication注解非常重要,没有该注解程序就无法启动,该注解表名项目是一个Spring Boot项目,Spring Boot会通过运行@SpringBootApplication注解标注的类的main方法来启动应用

@SpringBootApplication

查看@SpringBootApplication注解源码

  • @Target(ElementType.TYPE):表示该注解是作用在类上
  • @Inherited:表示该注解是一个继承注解
  • @SpringBootConfiguration:这是一个Spring Boot配置类
    • @Configuration注解,既标注为配置类的意思
    • @Component注解:标注为应用程序的一个组件
  • @EnableAutoConfiguration: 开启自动配置功能,Spring Boot的自动配置配置需要该注解开启
    • @AutoConfigurationPackage:自动配置包
    • @Import(AutoConfigurationPackages.Registrar.class):@Import注解是Spring底层注解,用来导入组件,既导入AutoConfigurationPackages.Registrar.class
Deubg @Import注解导入Registrar

设置断点

选中“new PackageImports(metadata).getPackageNames()”点击鼠标右键,选择Evaluate Expression

点击Evaluate

Registrar的作用是将主程序类所在包以及所有子包下的Bean全都注册到Spring容器中

Deubg @Import注解 AutoConfigurationImportSelector

在getCandidateConfigurations方法左侧打上断点,并运行Dubg模式

会给容器中导入非常多的自动配置类,有了这些配置类就不用再手写配置了,那么这些配置是在哪里配置的呢?

重启启动Debug模式,来到AutoConfigurationImportSelector的第123行,点击Step Into;再点击Step Into选择进入loadFactoryNames方法内部;点击Step Over;到SpringFactoriesLoader类的第132行点击Step Into 进入loadSpringFactories方法内部。SpringFactoriesLoader类第136行这里首先会从缓存中获取classLoader,判断不为空之后直接返回所有配置类(去除之前的断点,将断点打在SpringFactoriesLoader类第136行,此时在进行debug,result为空),如果为空则会从配置文件中获取配置类

点击进入FACTORIES_RESOURCE_LOCATION,可以确定Spring Boot的自动配置类都存放在”META-INF/spring.factories“目录下

Spring Boot包含的自动配置类

Spring Boot在启动时从类路径下的”META-INF/spring.factories“获取EnableAutoConfiguration指定的值,将这些值代表的类导入Spring容器中,自动配置就会生效

WebMVC自动配置类配置

可以看出Spring Boot中Spring MVC的自动配置类包含了DispatchServlet等原先Spring MVC XML配置文件的内容。

以上就是Spring Boot的版本控制以及依赖管理✿✿ヽ(°▽°)ノ✿!

0 人点赞