Spring Boot 框架的关键组件和内部机制

在我之前的帖子“Spring Boot入门”中,我们已经讨论了Spring Boot的基础知识。现在我们将讨论“Spring Boot的主要组件是什么”和“Spring Boot在底层如何工作”。

Spring Boot框架的关键组件

Spring Boot框架主要有四个主要组件。

  • Spring Boot Starters
  • Spring Boot自动配置器
  • Spring Boot CLI
  • Spring Boot执行器

注意:除了这四个主要组件外,还有两个Spring Boot组件:

  • Spring Initilizr
  • Spring Boot集成开发环境(IDE)

为了快速启动新的Spring Boot项目,我们可以使用“Spring Initializr” web界面。Spring Initializr网址:https://start.spring.io。我们有许多Spring Boot集成开发环境,如Eclipse IDE,IntelliJ IDEA,Spring STS Suite等。我们将在接下来的帖子中讨论这两个组件。现在我们将逐一详细讨论这四个Spring Boot组件。

Spring Boot Starter

Spring Boot Starter(Spring Boot启动器)是Spring Boot框架的主要关键特性或组件之一。Spring Boot Starter的主要责任是将一组常见或相关的依赖项合并为单个依赖项。我们将通过一个示例详细探讨这一说法。例如,我们想要开发一个带有Tomcat Web服务器的Spring Web应用程序。然后,我们需要在Maven的pom.xml文件或Gradle的build.gradle文件中添加以下最小的jar依赖项

  • Spring核心Jar文件(spring-core-xx.jar)
  • Spring Web Jar文件(spring-web-xx.jar)
  • Spring Web MVC Jar文件(spring-webmvc-xx.jar)
  • Servlet Jar文件(servlet-xx.jar)

如果我们想要添加一些数据库内容,那么我们需要添加类似Spring JDBC jar文件、Spring ORM jar文件、Spring Transaction Jar文件等数据库相关的jar包

  • Spring JDBC Jar文件(spring-jdbc-xx.jar)
  • Spring ORM Jar文件(spring-orm-xx.jar)
  • Spring Transaction Jar文件(spring-transaction-xx.jar)

我们需要在我们的构建文件中定义大量的依赖关系。对于开发人员来说,这是一项非常繁琐和繁重的任务。而且它还会增加我们构建文件的大小。如何避免在我们的构建文件中定义这么多依赖关系呢?答案是使用Spring Boot Starter组件。Spring Boot Starter组件将所有相关的jar包合并到单个jar文件中,因此我们只需向构建文件添加一个jar文件依赖即可。与其向构建文件添加上述4个jar文件,我们只需添加一个jar文件:“spring-boot-starter-web” jar文件。当我们向构建文件添加“spring-boot-starter-web” jar文件依赖时,Spring Boot框架将自动下载所有所需的jar并添加到我们的项目类路径中。同样,“spring-boot-starter-logging” jar文件加载其依赖jar,如“jcl-over-slf4j, jul-to-slf4j,log4j-over-slf4j, logback-classic”到我们的项目类路径中。

Spring Boot Starter的主要优点

  • Spring Boot Starter减少了定义许多依赖项的复杂性,简化了项目的构建依赖关系。
  • Spring Boot Starter简化了项目的构建依赖关系。

关于Spring Boot Starter组件就是这些了。我们将在接下来的帖子中讨论一些Spring Boot示例的更多细节。

Spring Boot 自动配置器

Spring Boot框架的另一个重要组件是Spring Boot自动配置器。大多数Spring IO平台(Spring框架)的评论家认为:“开发基于Spring的应用程序需要大量配置(无论是XML配置还是注解配置)。那么如何解决这个问题呢?这个问题的解决方案是Spring Boot自动配置器。Spring Boot自动配置器的主要责任是减少Spring的配置。如果我们在Spring Boot中开发Spring应用程序,那么我们就不需要定义单个XML配置,几乎不需要或者最少的注解配置。Spring Boot自动配置器组件将负责提供这些信息。例如,如果我们想要使用Spring IO平台声明一个Spring MVC应用程序,那么我们需要定义大量的XML配置,如视图、视图解析器等。但是如果我们使用Spring Boot框架,那么我们就不需要定义这些XML配置了。Spring Boot自动配置器会处理这些。如果我们在项目构建文件中使用“spring-boot-starter-web” jar文件,那么Spring Boot自动配置器将自动解析视图、视图解析器等。而且Spring Boot减少了注解配置的定义。如果我们在类级别使用@SpringBootApplication注解,那么Spring Boot自动配置器将自动将所有必需的注解添加到Java类字节码中。如果我们查阅Spring Boot文档,我们可以找到关于@SpringBootApplication的以下定义。

@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Inherited
@Configuration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication

这就是,@SpringBootApplication = @Configuration + @ComponentScan + @EnableAutoConfiration。关于Spring Boot自动配置组件就是这样。我们将在接下来的帖子中通过一些Spring Boot示例讨论一些更多的细节。注意:

  • 简单来说,Spring Boot Starter减少了构建的依赖关系,而Spring Boot AutoConfigurator减少了Spring配置。
  • 正如我们讨论过的,Spring Boot Starter依赖于Spring Boot AutoConfigurator,Spring Boot Starter会自动触发Spring Boot AutoConfigurator。

Spring Boot CLI

Spring Boot CLI(命令行界面)是一个用于从命令提示符运行和测试Spring Boot应用程序的Spring Boot软件。当我们使用CLI运行Spring Boot应用程序时,它在内部使用Spring Boot Starter和Spring Boot AutoConfigurate组件来解决所有依赖关系并执行应用程序。我们甚至可以使用简单的Spring Boot CLI命令运行Spring Web应用程序。Spring Boot CLI引入了一个新的“spring”命令来从命令提示符执行Groovy脚本。spring命令示例:

spring run HelloWorld.groovy

在这里,HelloWorld.groovy 是一个 Groovy 脚本文件名。就像 Java 源文件名具有 *.java 扩展名一样,Groovy 脚本文件具有 *.groovy 扩展名。”spring” 命令执行 HelloWorld.groovy 并产生输出。Spring Boot CLI 组件需要许多步骤,如 CLI 安装、CLI 设置、开发简单的 Spring Boot 应用程序并对其进行测试。因此,我们将专门发帖讨论它的详细信息,并附带一些 Spring Boot 示例。请参阅我下一篇关于 Spring Boot CLI 的帖子。

Spring Boot 执行器

Spring Boot 执行器组件提供了许多功能,但两个主要功能是

  • 为 Spring Boot 应用程序提供管理端点。
  • Spring Boot 应用程序度量。

当我们使用 CLI 运行我们的 Spring Boot Web 应用程序时,Spring Boot 执行器会自动将主机名设为“localhost”,默认端口号设为“8080”。我们可以使用“https://localhost:8080/”端点访问此应用程序。我们实际上使用 HTTP 请求方法如 GET 和 POST 来表示使用 Spring Boot 执行器的管理端点。我们将在接下来的帖子中讨论关于 Spring Boot 执行器的一些更多细节。

Spring Boot 框架的内部

总是建议了解Spring Boot框架如何减少构建的依赖关系,Spring配置等。Spring Boot在底层是如何工作的。如果您熟悉Groovy编程语言,那么您就会了解大部分内容。在Groovy中,我们不需要添加一些导入,也不需要向Groovy项目添加一些依赖。当我们使用Groovy编译器(groovyc)编译Groovy脚本时,它会自动添加所有默认的导入语句然后进行编译。同样地,Groovy编程语言包含一个JAR依赖解析器来解析并添加所有必需的jar文件到Groovy项目类路径中。Spring Boot框架在内部使用Groovy来添加一些默认项,如默认导入语句、应用程序的main()方法等。当我们从CLI命令提示符中运行Groovy脚本时,它会使用这个main()方法来运行Spring Boot应用程序。

Grape

葡萄(Grape)是一种嵌入式依赖解析引擎。Grape是一个嵌入到Groovy中的JAR依赖管理器。Grape允许我们快速向项目类路径添加Maven仓库依赖,以减少构建文件定义。Spring Boot框架的编程模型主要受到Groovy编程模型的启发。Spring Boot框架在内部依赖于这两个主要组件:Groovy和Grape。您可以参考葡萄文档https://docs.groovy-lang.org/latest/html/documentation/grape.html获取更多详情。关于Spring组件和内部情况就介绍到这里。我们将在接下来的帖子中详细讨论这些组件,并提供一些Spring Boot示例。如果您有任何疑问,请在评论中告诉我。

Source:
https://www.digitalocean.com/community/tutorials/key-components-and-internals-of-spring-boot-framework