在我之前的帖子“Spring Boot入门”中,我们已经讨论了Spring Boot的基础知识。现在我们将讨论“Spring Boot的主要组件有哪些”以及“Spring Boot在底层是如何工作的”。
Spring Boot框架的关键组件
Spring Boot框架主要有四个主要组件。
- Spring Boot启动器
- Spring Boot自动配置器
- Spring Boot命令行界面(CLI)
- Spring Boot执行器
注意:除了这四个主要组件外,还有两个其他的Spring Boot组件:
- Spring Initilizr
- Spring Boot集成开发环境(IDE)
为了快速启动新的Spring Boot项目,我们可以使用“Spring Initializr”网页界面。Spring Initializr网址:https://start.spring.io。我们有许多Spring Boot IDE,如Eclipse IDE、IntelliJ IDEA、Spring STS Suite等。我们将在后续的帖子中讨论这两个组件。现在我们将详细讨论这四个Spring Boot组件。
Spring Boot Starter
Spring Boot Starters是Spring Boot框架的主要关键特性或组件之一。Spring Boot Starter的主要责任是将一组常见或相关的依赖项合并为单个依赖项。我们将通过一个示例详细探讨这一说法。例如,我们想要开发一个带有Tomcat Web服务器的Spring Web应用程序。然后,我们需要在Maven的pom.xml文件或Gradle的build.gradle文件中添加以下最小的jar依赖项
- Spring core 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文件依賴項即可。我們只需將“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 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还减少了注释配置的定义。如果我们在类级别使用@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 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 Actuator
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 是一個嵌入式的相依性解析引擎。Grape 是嵌入到 Groovy 中的 JAR 相依性管理器。Grape 讓我們能夠快速地將 Maven 儲存庫的相依性添加到我們的專案類別路徑中,以減少建置檔案的定義。Spring Boot 框架的程式設計模型主要受到 Groovy 程式設計模型的啟發。Spring Boot 框架內部依賴於這兩個主要元件:Groovy 和 Grape。您可以參考 Grape 文件 https://docs.groovy-lang.org/latest/html/documentation/grape.html 以獲取更多詳細資訊。關於 Spring 元件和內部原理就是這些了。我們將在接下來的文章中使用一些 Spring Boot 範例來詳細討論這些元件。如果您有任何疑問,請在評論中留言給我。