Spring Boot 框架的关键组件和内部结构
在我之前的文章“Spring Boot 简介”中,我们讨论了 Spring Boot 基础知识。现在我们将讨论“Spring Boot 的主要组件是什么”和“Spring Boot 的底层工作原理”。
Spring Boot 框架的关键组件
Spring Boot 框架主要有四个主要组件。
- Spring Boot Starter
- Spring Boot 自动配置器
- Spring Boot CLI
- Spring Boot 执行器
注意:除了这四个主要组件之外,还有两个 Spring Boot 组件:
- Spring 初始化
- Spring Boot IDE
为了快速启动新的 Spring Boot 项目,我们可以使用“Spring Initializr” Web 界面。Spring Initializr URL:https://start.spring.io。我们有许多 Spring Boot IDE,如 Eclipse IDE、IntelliJ IDEA、Spring STS Suite 等。我们将在后续文章中讨论这两个组件。现在我们将逐一详细讨论这四个 Spring Boot 组件。
Spring Boot Starter
Spring Boot Starters 是 Spring Boot Framework 的主要关键功能或组件之一。Spring Boot Starter 的主要职责是将一组常见或相关的依赖项组合成单个依赖项。我们将通过一个例子详细探讨这一说法。例如,我们想用 Tomcat WebServer 开发一个 Spring WebApplication。然后我们需要在 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)
如果我们想添加一些数据库内容,那么我们需要添加数据库相关的 jar 文件,如 Spring JDBC jar 文件、Spring ORM jar 文件、Spring Transaction Jar 文件等。
- Spring JDBC Jar 文件(spring-jdbc-xx.jar)
- Spring ORM Jar文件(spring-orm-xx.jar)
- Spring 事务 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 Framework 将自动下载所有必需的 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 Framework 的另一个重要关键组件是 Spring Boot AutoConfigurator。大多数 Spring IO Platform(Spring Framework)批评者的观点是“开发基于 Spring 的应用程序需要大量配置(XML 配置或注释配置)。那么如何解决这个问题呢?解决这个问题的方法是 Spring Boot AutoConfigurator。Spring Boot AutoConfigurator 的主要职责是减少 Spring 配置。如果我们在 Spring Boot 中开发 Spring 应用程序,那么我们不需要定义单个 XML 配置,几乎不需要或只需要极少的注释配置。Spring Boot AutoConfigurator 组件将负责提供这些信息。例如,如果我们想使用 Spring IO Platform 声明一个 Spring MVC 应用程序,那么我们需要定义许多 XML 配置,如视图、视图解析器等。但如果我们使用 Spring Boot Framework,那么我们不需要定义这些 XML 配置。Spring Boot AutoConfigurator 将接管这一点。如果我们在项目构建文件中使用“spring-boot-starter-web”jar 文件,那么 Spring Boot AutoConfigurator 将自动解析视图、视图解析器等。此外,Spring Boot 还减少了注释配置的定义。如果我们在类级别使用@SpringBootApplication注释,那么 Spring Boot AutoConfigurator 将自动将所有必需的注释添加到 Java 类字节码中。如果我们浏览 Spring Boot 文档,我们可以找到@SpringBootApplication的以下定义。
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Inherited
@Configuration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication
也就是说,@SpringBootApplication = @Configuration + @ComponentScan + @EnableAutoConfiration。这就是关于 Spring Boot AutoConfigurate 组件的内容。我们将在接下来的文章中通过一些 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 Actuator 组件提供了许多功能,但主要有两个功能:
- 为 Spring Boot 应用程序提供管理端点。
- Spring Boot 应用程序指标。
当我们使用 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 配置等。Spring Boot 的底层工作原理。如果你熟悉 Groovy 编程语言,那么你就会知道大部分内容。在 Groovy 中,我们不需要添加一些导入,也不需要向 Groovy 项目添加一些依赖项。当我们使用 Groovy 编译器 (groovyc) 编译 Groovy 脚本时,它会自动添加所有默认导入语句,然后进行编译。同样,Groovy 编程语言包含一个 JAR 依赖解析器来解析并将所有必需的 jar 文件添加到 Groovy 项目类路径。Spring Boot 框架在内部使用 Groovy 添加一些默认值,如默认导入语句、应用程序 main() 方法等。当我们从 CLI 命令提示符运行 Groovy 脚本时,它使用这个 main() 方法来运行 Spring Boot 应用程序。
葡萄
Grape 是一个嵌入式依赖解析引擎。Grape 是一个嵌入到 Groovy 中的 JAR 依赖管理器。Grape 允许我们快速将 maven 存储库依赖项添加到我们的项目类路径中,以减少构建文件定义。Spring Boot Framework 编程模型主要受 Groovy 编程模型的启发。Spring Boot Framework 内部依赖于这两个主要组件:Groovy 和 Grape。您可以参考 Grape 文档https://docs.groovy-lang.org/latest/html/documentation/grape.html了解更多详细信息。以上就是关于 Spring 组件和内部结构的内容。我们将在后续文章中通过一些 Spring Boot 示例详细讨论这些组件。如果您有任何疑问,请给我留言。