Spring Boot框架深度剖析:核心组件与内部架构详解

在我之前的帖子《Spring Boot介绍》中,我们已经讨论了Spring Boot的基础知识。现在我们将讨论“Spring Boot的主要组成部分”以及“Spring Boot在底层是如何工作的”。

Spring Boot框架的关键组件

Spring Boot框架主要包括四个主要组件。

  • Spring Boot Starters
  • Spring Boot AutoConfigurator
  • Spring Boot CLI
  • Spring Boot Actuator

除了这四个主要组件之外,还有两个Spring Boot组件。

  • Spring Initilizr
  • Spring Boot IDEs

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

Spring Boot起动器

Spring Boot Starters 是 Spring Boot 框架的主要特性之一。Spring Boot Starter 的主要职责是将一组常见或相关的依赖项合并为单个依赖项。我们将通过一个例子详细探讨这个陈述。例如,我们想要开发一个使用 Tomcat WebServer 的 Spring WebApplication。那么我们需要在 Maven 的 pom.xml 文件或 Gradle 的 build.gradle 文件中添加以下最小的 jar 依赖项。

  • Spring core Jar file(spring-core-xx.jar)
  • Spring Web Jar file(spring-web-xx.jar)
  • Spring Web MVC Jar file(spring-webmvc-xx.jar)
  • Servlet Jar file(servlet-xx.jar)

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

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

在我们的构建文件中,我们需要定义很多依赖关系。对于开发人员来说,这是一项非常繁琐和繁重的任务。而且它还会增加我们的构建文件大小。有什么方法可以避免在我们的构建文件中定义这么多依赖吗?解决方案就是Spring Boot Starter组件。Spring Boot Starter组件将所有相关的jar文件合并到一个单独的jar文件中,这样我们只需要向我们的构建文件添加一个jar文件依赖即可。我们只需要向我们的构建文件添加一个jar文件依赖,即“spring-boot-starter-web” jar文件,而不是添加以上4个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 reduces defining many dependencies simplify project build dependencies.
  • Spring Boot Starter simplifies project build dependencies.

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

春季启动自动配置器

Spring Boot框架中的另一个重要组件是Spring Boot自动配置器。大部分Spring IO平台(Spring Framework)的批评意见是:“开发基于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 + @EnableAutoConfiguration。这就是关于Spring Boot自动配置组件的全部内容。我们将在后续的帖子中使用一些Spring Boot的例子来讨论更多的细节。注意:

  • In simple words, Spring Boot Starter reduces build’s dependencies and Spring Boot AutoConfigurator reduces the Spring Configuration.
  • As we discussed that Spring Boot Starter has a dependency on Spring Boot AutoConfigurator, Spring Boot Starter triggers Spring Boot AutoConfigurator automatically.

Spring Boot CLI 的中文释义为“Spring Boot 命令行界面”。

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 Actuator 春季引导器

Spring Boot Actuator组件提供了许多功能,但两个主要特性是

  • Providing Management EndPoints to Spring Boot Applications.
  • Spring Boot Applications Metrics.

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

Spring Boot框架的内部机制

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

葡萄

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

bannerAds