Spring Bootフレームワークの主要な要素と内部構成

私たちの前回の投稿「Spring Boot入門」では、Spring Bootの基礎について説明しました。今度は、「Spring Bootの主要なコンポーネント」と「Spring Bootが裏側でどのように動作するか」について話し合います。

Spring Bootフレームワークの主要な要素

Spring Bootフレームワークは主に4つの主要なコンポーネントを持っています。

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

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

  • Spring Initilizr
  • Spring Boot IDEs

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

スプリングブートのスターター

Spring Boot Startersは、Spring Bootフレームワークの主要な特徴またはコンポーネントの一つです。Spring Boot Starterの主な責任は、一群の共通または関連する依存関係を単一の依存関係に組み合わせることです。この文を1つの例で詳しく説明します。例えば、Tomcat WebServerを使用してSpring Webアプリケーションを開発したいとします。その場合、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)

データベース関連の機能を追加したい場合は、Spring JDBC JarファイルやSpring ORM Jarファイル、Spring Transaction Jarファイルなどのデータベース関連の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ファイルを1つのjarファイルにまとめるため、ビルドファイルにはjarファイルの依存関係を追加するだけで済みます。上記の4つのjarファイルの代わりに、私たちは1つのjarファイル、つまり「spring-boot-starter-web」jarファイルをビルドファイルに追加する必要があります。「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 reduces defining many dependencies simplify project build dependencies.
  • Spring Boot Starter simplifies project build dependencies.

それがSpring Boot Starterコンポーネントについての説明です。今後の投稿で、いくつかのSpring Bootの例を使って、さらなる詳細を議論します。

スプリングブートの自動設定

Spring Bootフレームワークのもう一つ重要なキーコンポーネントは、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 + @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.

スプリングブート 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のActuatorコンポーネントは様々な機能を提供していますが、その中で最も重要な機能は2つです。

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

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

スプリングブートフレームワークの内部構造

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

ぶどう

グレープは、埋め込み型の依存関係解決エンジンです。グレープは、Groovyに埋め込まれたJARの依存関係マネージャーです。グレープを使用すると、プロジェクトのクラスパスにMavenリポジトリの依存関係を迅速に追加し、ビルドファイルの定義を減らすことができます。Spring Bootのフレームワークプログラミングモデルは、主にGroovyプログラミングモデルに触発されています。Spring Bootフレームワークは、内部的にこれら2つの主要コンポーネント、つまりGroovyとグレープに依存しています。詳細については、Grapeのドキュメンテーション(https://docs.groovy-lang.org/latest/html/documentation/grape.html)を参照してください。これでSpringコンポーネントと内部については以上です。今後の投稿で、いくつかのSpring Bootの例を使用して、これらのコンポーネントについて詳しく説明します。疑問点があれば、コメントでお知らせください。

コメントを残す 0

Your email address will not be published. Required fields are marked *