Spring Bootフレームワークの主要なコンポーネントと内部

私の前の投稿「Spring Bootの紹介」では、Spring Bootの基礎について説明しました。今度は「Spring Bootの主要なコンポーネント」と「Spring Bootの内部での動作方法」について説明します。

Spring Bootフレームワークの主要なコンポーネント

Spring Bootフレームワークには主に4つの主要なコンポーネントがあります。

  • Spring Bootスターター
  • Spring Boot自動設定
  • Spring Boot CLI
  • Spring Bootアクチュエータ

注意:これらの4つの主要なコンポーネントに加えて、Spring Bootにはさらに2つのコンポーネントがあります。

  • Springイニシャライザ
  • Spring Boot IDE

新しいSpring Bootプロジェクトを素早く開始するために、「Spring Initializr」のWebインターフェースを使用できます。Spring InitializrのURL:https://start.spring.io。Eclipse IDE、IntelliJ IDEA、Spring STS Suiteなど、多くのSpring Boot IDEがあります。これらの2つのコンポーネントについては、今後の投稿で説明します。それでは、Spring Bootのこれらの4つのコンポーネントについて詳しく説明します。

Spring Boot Starter

Spring Boot StartersはSpring Bootフレームワークの主要な鍵機能またはコンポーネントの一つです。Spring Boot Starterの主な責任は、共通または関連する依存関係のグループを単一の依存関係に組み合わせることです。この声明を1つの例を使って詳しく調査します。たとえば、Tomcat WebServerでSpring Webアプリケーションを開発したい場合、次の最小のjar依存関係をMavenのpom.xmlファイルまたはGradleのbuild.gradleファイルに追加する必要があります。

  • 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ファイルを1つのjarファイルにまとめるため、ビルドファイルにはjarファイルの依存関係のみを追加することができます。上記の4つのjarファイルをビルドファイルに追加する代わりに、1つのjarファイル「spring-boot-starter-web」を追加する必要があります。「spring-boot-starter-web」jarファイルの依存関係をビルドファイルに追加すると、Spring Bootフレームワークが自動的に必要なすべてのjarファイルをダウンロードし、プロジェクトのクラスパスに追加します。同様に、「spring-boot-starter-logging」jarファイルは、「jcl-over-slf4j、jul-to-slf4j、log4j-over-slf4j、logback-classic」などの依存関係のjarファイルをプロジェクトのクラスパスに読み込みます。

Spring Boot Starterの主な利点

  • Spring Boot Starterは、多くの依存関係の定義を簡略化し、プロジェクトのビルド依存関係を簡素化します。
  • Spring Boot Starterは、プロジェクトのビルド依存関係を簡素化します。

これがSpring Boot Starterコンポーネントについての説明です。次回の投稿では、いくつかのSpring Bootの例を使って詳細を説明します。

Spring Bootオートコンフィギュレータ

Spring Bootフレームワークのもう1つの重要なキーコンポーネントは、Spring Boot AutoConfiguratorです。Spring IOプラットフォーム(Spring Framework)のほとんどの批評家の意見は、「Springベースのアプリケーションを開発するには多くの設定が必要です(XML設定またはアノテーション設定のいずれか)。では、この問題をどのように解決しますか。この問題の解決策は、Spring Boot AutoConfiguratorです。Spring Boot AutoConfiguratorの主な責任は、Springの設定を削減することです。Spring BootでSpringアプリケーションを開発する場合、単一のXML設定を定義する必要はありませんし、ほとんどまたは最小限のアノテーション設定も必要ありません。Spring Boot AutoConfiguratorコンポーネントがそれらの情報を提供するのを担当します。たとえば、Spring IOプラットフォームを使用してSpring MVCアプリケーションを宣言したい場合、ビュー、ビューリゾルバなどの多くのXML設定を定義する必要があります。しかし、Spring Bootフレームワークを使用すると、これらの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には、コマンドプロンプトからGroovyスクリプトを実行するための新しい「spring」コマンドが導入されています。 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の例を示します。Spring Boot CLIに関する次の投稿を参照してください。

Spring Bootアクチュエータ

Spring Bootアクチュエータコンポーネントには多くの機能がありますが、主な機能は2つです。

  • Spring Bootアプリケーションに管理エンドポイントを提供すること。
  • Spring Bootアプリケーションのメトリクス。

CLIを使用してSpring Boot Webアプリケーションを実行すると、Spring Bootアクチュエータは自動的にホスト名を「localhost」、デフォルトのポート番号を「8080」に設定します。このアプリケーションには「https://localhost:8080/」というエンドポイントを使用してアクセスできます。実際には、Spring Bootアクチュエータを使用して管理エンドポイントを表すために、GETおよびPOSTなどのHTTPリクエストメソッドを使用します。今後の投稿でSpring Bootアクチュエータについてさらに詳しく説明します。

Spring Bootフレームワークの内部

Spring Bootフレームワークがビルドの依存関係、Springの設定などをどのように削減するかを理解することが常に推奨されています。 Spring Bootがどのように動作するかを内部で理解することも重要です。 Groovyプログラミング言語に詳しい場合、ほとんどのことを知っているはずです。 Groovyでは、いくつかのインポートを追加する必要はなく、Groovyプロジェクトにいくつかの依存関係を追加する必要もありません。 GroovyスクリプトをGroovyコンパイラ(groovyc)を使用してコンパイルすると、自動的にすべてのデフォルトのインポートステートメントが追加されてコンパイルされます。同様に、Groovyプログラミング言語にはJAR依存関係リゾルバが含まれており、必要なすべてのjarファイルをGroovyプロジェクトのクラスパスに解決して追加します。 Spring Bootフレームワークは内部的にGroovyを使用して、デフォルトのインポートステートメント、アプリケーションのmain()メソッドなどを追加します。CLIコマンドプロンプトからGroovyスクリプトを実行する場合、このmain()メソッドを使用してSpring Bootアプリケーションを実行します。

Grape

Grapeは埋め込み型の依存解決エンジンです。GrapeはGroovyに埋め込まれたJAR Dependency Managerです。Grapeを使用すると、プロジェクトのクラスパスにMavenリポジトリの依存関係を迅速に追加でき、ビルドファイルの定義を減らすことができます。Spring Boot Frameworkのプログラミングモデルは主にGroovyプログラミングモデルに触発されています。Spring Boot Frameworkは内部的にこれら2つの主要なコンポーネント、つまりGroovyとGrapeに依存しています。 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