ポイント: スプリングフレームワークは、エンタープライズJavaアプリケーションを構築するためのオープンソースフレームワークであり、依存性注入やアスペクト指向プログラミングなどの機能を通じて開発を簡素化することに焦点を当てています。他のスプリングプロジェクト(スプリングブートやスプリングクラウドなど)と統合されます。
- コア機能にはIoCコンテナ、データアクセス、トランザクション管理が含まれます。
- スプリングはMVCアーキテクチャとテストサポートを使用してWebアプリケーションの開発を簡素化します。
Javaは最も人気があり広く使用されているプログラミング言語の1つであり、モバイルアプリケーションから大規模なエンタープライズシステムまで、あらゆるものを支えています。Javaはほぼすべての種類の開発を支えることができるため、Javaベースのソフトウェア開発を簡素化し効率化するための無数のフレームワークやツールが進化してきました。
JavaベースのWebアプリケーションを構築する際、スプリングは最も人気のあるフレームワークの1つです。この記事では、スプリングフレームワークとその使用方法について見ていきます。
スプリングフレームワークとは?
スプリングフレームワークは、エンタープライズJavaアプリケーションを構築するためのオープンソースフレームワークです。スプリングは、制御の反転や依存性注入などの技術を含むフレームワークを提供することで、複雑で厄介なエンタープライズJavaアプリケーションの開発プロセスを簡素化することを目的としています。
- アスペクト指向プログラミング(AOP)
- 依存性注入(DI)
- プレーンオールドJavaオブジェクト(POJO)
これらすべての技術を持ちながら、スプリングはスケーラブルで安全かつ堅牢なエンタープライズWebアプリケーションを作成するために使用できる軽量フレームワークです。
マクロレベルでは、スプリングフレームワークは、スプリングWebフロー、スプリングMVC、スプリングORMなどのサブフレームワークのコレクションと見なすことができます。スプリングは、JavaだけでなくKotlinやGroovyもサポートしています。
スプリングフレームワークは、スプリングベースのすべての他のプロジェクトを支えるベースでもあります。
- スプリングブート
- スプリングクラウド
- スプリングGraphQL
スプリングフレームワークのコア機能
スプリングフレームワークのコア機能を見てみましょう。
IoC(制御の反転)コンテナ
IoCコンテナは、Javaオブジェクトを設定し管理するための効率的な方法を提供するスプリングのコア機能の1つです。このコンテナは、定義されたJavaオブジェクトのライフサイクルを管理し、スプリングベースのアプリケーションの設定可能性を大幅に向上させます。
IoCは、依存性注入または依存性ルックアップパターンを使用して、ランタイム中にオブジェクト参照を提供します。コンテナは、設定管理に必要なアセンブラコードで構成されています。
スプリングは、これらの機能を促進するために使用できるorg.springframework.beansおよびorg.springframework.contextパッケージを提供しています。
アスペクト指向プログラミングのサポート
AOPは、アプリケーション全体にまたがる機能である横断的関心事に対して、よりモジュール性を提供することを目的としています。例えば:
- ロギング
- キャッシング
- トランザクション管理
- 認証
- その他。
さらに、AOPはオブジェクト指向プログラミングを補完し、プログラムを構造化するための異なる方法を提供します。OOPのモジュール性はクラスに基づいています。
AOPでは、モジュール性の主な単位はアスペクト(横断的関心事)です。これにより、ユーザーはAOPを使用してカスタムアスペクトや宣言型エンタープライズサービスを作成できます。IoCコンテナはAOPに依存せず、開発者が好みのプログラミング方法を選択する自由をさらに提供します。
ただし、スプリングのIoCと組み合わせたアスペクト指向プログラミングは、堅牢なミドルウェアソリューションを提供します。
データアクセスフレームワーク
データベース通信の問題は、アプリケーションを開発する際に開発者が直面する一般的な問題の1つです。スプリングは、JDBC、Hibernate、Java Persistence API(JPA)などのJavaで人気のあるデータアクセスフレームワークを直接サポートすることで、データベース通信プロセスを簡素化します。
さらに、すべてのサポートされているデータアクセスフレームワークに対して、リソース管理、例外処理、およびリソースラッピングなどの機能を提供し、開発プロセスをさらに簡素化します。
トランザクション管理フレームワーク
JavaトランザクションAPI(JTA)とは異なり、スプリングトランザクション管理フレームワークは、グローバルおよびネストされたトランザクションに制限されません。スプリングは、ユーザーが次のことを可能にするJavaの抽象化メカニズムを提供します。
- ローカル、グローバル、ネストされたトランザクションで作業
- セーブポイント
- アプリケーション全体でのトランザクション管理の簡素化
スプリングデータアクセスフレームワークは、メッセージングとキャッシングをサポートするトランザクション管理フレームワークと直接統合されます。これにより、開発者はEJBやJTAに依存せず、アプリケーション全体にわたる機能豊富なトランザクションシステムを作成できます。
スプリングMVCフレームワーク
スプリングMVCは、開発者が人気のMVCパターンを使用してアプリケーションを作成できるようにします。リクエストベースのフレームワークであり、開発者はニーズに正確に合ったカスタマイズされたMVC実装を簡単に作成できます。
スプリングMVCのコアコンポーネントは、ユーザーのリクエストを処理し、正しいコントローラーに転送するDispatcherServletクラスです。これにより、コントローラーはリクエストを処理し、モデルを作成し、指定されたビューを介して最終ユーザーに情報を提供できます。
スプリングWebサービス
このスプリングWebサービスコンポーネントは、アプリケーション内でWebサービスエンドポイントを作成および管理するための効率的な方法を提供します。XMLを使用して管理できる層状アプローチを提供し、特定のオブジェクトへのWebリクエストのマッピングを提供できます。
スプリングテストフレームワーク
テストは、任意の開発のコア部分です。スプリングは、次のようなコンポーネントを使用してフレームワーク内でのテストを簡素化します。
- モックオブジェクト
- TestContextフレームワーク
- スプリングMVCテスト
- その他。
(テスト自動化フレームワークについてお読みください。)
スプリングフレームワークのアーキテクチャ
さて、スプリングを素晴らしいフレームワークにしているコア機能を見てきました。次に、これらの機能を支えるスプリングのアーキテクチャについて見ていきましょう。
上記の図は、スプリングアーキテクチャの基本コンポーネントを示しています。ご覧のとおり、スプリングはさまざまな機能を有効にする異なるモジュールを使用して構築されています。
コアコンテナ
これには、スプリングフレームワークの礎となる基本モジュールが含まれます。
- コア(spring-core)は、制御の反転や依存性注入などの機能を支えるフレームワークのコアです。
- Beans(spring-beans)は、ファクトリーパターンの洗練された実装であるBeanFactoryを提供します。
- コンテキスト(spring-context)は、コアとBeansに基づいて構築され、定義されたオブジェクトにアクセスするための手段を提供します。ApplicationContextインターフェースは、コンテキストモジュールのコア部分であり、spring-context-supportはキャッシング、メール送信、テンプレートエンジンなどのサードパーティとの相互作用をサポートします。
- SpEL(spring-expression)は、ユーザーがランタイム中にオブジェクトグラフをクエリおよび操作するためにスプリング表現言語を使用できるようにします。
データアクセス/統合
これには、アプリケーション内のデータアクセスとトランザクション処理を処理するために使用されるモジュールが含まれます。
- JDBC(spring-jdbc)は、データベースを扱う際にJDBCコーディングを分離する必要がない抽象化レイヤーを提供します。
- ORM(spring-orm)は、JPA、JDO、Hibernateなどの人気のオブジェクト関係マッピングAPI用の統合レイヤーです。
- OXM(spring-oxm)は、JAXB、XStreamなどのオブジェクト/XMLマッピング実装をサポートする抽象化レイヤーです。
- JMS(spring-jms)は、Springメッセージングモジュールと直接統合されたメッセージを作成および消費するJavaメッセージングサービスモジュールです。
- トランザクション(spring-tx)は、特別なインターフェースやPOJOを含むクラスに対してプログラム的および宣言的トランザクション管理を提供します。
Web
Web層は、スプリングのWebベースの機能を支えるモジュールに関連しています。
- WebSocket(spring-websocket)は、クライアントとサーバー間のWebソケットベースの通信を支えます。
- サーブレット(spring-webmvc)は、MVCおよびREST実装を含むスプリングWebMVCモジュールです。
- Web(spring-web)は、基本的なWeb指向の機能を提供し、HTTPクライアントおよびスプリングのリモーティングに関連する部分を含みます。
- ポートレット(spring-webmvc-portlet)は、ポートレット環境で使用されるMVC実装を提供します。
その他のモジュール
- AOP(spring-aop)は、アプリケーションを作成する際に使用できるアスペクト指向プログラミングの実装を提供します。
- Aspects(spring-aspects)は、Eclipse FoundationによるAspectJプログラミング拡張との直接統合を可能にします。
- Instrumentation(spring-instrument)は、アプリケーションサーバー用のクラスのインストゥルメンテーションサポートおよびクラスローダー実装です。
- Messaging(spring-messaging)は、アプリケーション内のメッセージングを管理するための堅牢なプラットフォームを提供します。
- テスト(spring-test)は、JUnitおよびTestNGによるユニットおよび統合テストをサポートするスプリングテストモジュールです。
スプリングフレームワークの開始
スプリングを素晴らしいフレームワークにしている要素を理解したので、スプリングプロジェクトを開発し始める方法を見てみましょう。
次の例では、Windows環境とVisual Studio CodeをIDEとして使用します。まず、PCにJavaをインストールする必要があります。最新のオープンソースJava(OpenJDK)バイナリは、Adoptiumプロジェクトから入手できます。この記事を書く時点での最新のLTSリリースであるOpenJDK 17(LTS)を使用します。
スプリングプロジェクトを手動で作成することもできますが、スプリングイニシャライザ(https://start.spring.io/)は、スプリングブートを使用してプロジェクトを簡単に設定する方法を提供します。スプリングブートは、最小限の依存関係でスタンドアロンのスプリングベースのアプリケーションを作成できるようにするスプリングフレームワークの拡張です。
スプリングイニシャライザは、プロジェクトタイプ(Maven/Gradle)、言語(Java、Kotlin、Groovy)、プロジェクトメタデータ、パッケージング、Javaバージョン、依存関係など、さまざまなオプションを使用してスプリングプロジェクトを簡単に作成できる集中型プラットフォームを提供します。
Javaとスプリングブート2.5.5を使用して、Java 17(OpenJDK)をターゲットにし、スプリングWebを依存関係として持つtest_appという名前のシンプルなMavenプロジェクトを作成します。
上記のアクションにより、zipファイルが生成されます。そのzipファイルを解凍し、IDEでフォルダを開きます。Visual Studio CodeをIDEとして使用しているため、Javaとスプリングをサポートするための適切なVSCode拡張機能がインストールされていることを確認してください。以下は推奨される拡張機能です。
主要なJavaファイル(例:\src\main\java\com\myproject\test_app\TestAppApplication.java)に移動し、コードを次のように変更します。これにより、ユーザーがあいさつURLにアクセスする際にあいさつを返すシンプルなWebサーバーが作成されます。
package com.myproject.test_app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class TestAppApplication {
public static void main(String[] args) {
SpringApplication.run(TestAppApplication.class, args);
}
@GetMapping("/greeting")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("<h1>Hello %s!, This is My First Spring Project</h1>", name);
}
}
VS Codeビュー:
プロジェクトフォルダーのルートでターミナルを開き、次のコマンドを実行することで、プロジェクトをビルドして実行できます。
/mvnw spring-boot:run
結果:
Webサーバーが起動し、次のURL形式を使用してあいさつページに移動できます。
http://localhost:8080/greeting?name=<Value>
たとえば、http://localhost:8080/greeting?name=JakeのURLにアクセスすると、Jakeへのあいさつが提供されます。
スプリングはエンタープライズJavaアプリを支える
スプリングは、あらゆる規模のエンタープライズグレードのJavaアプリケーションを支えるために使用できる強力なJavaフレームワークです。時には複雑で手強くなることがありますが、このフレームワークを簡単に習得し、基礎から始めれば次の素晴らしいソフトウェアを構築できます。
スプリングフレームワークと他のすべてのスプリングプロジェクトは、開発プロセスを簡素化しながらあらゆるユーザーの要件に応えるために必要なツールと機能を提供します。
関連文献
これらの投稿は私自身の見解であり、必ずしもBMCの立場、戦略、または意見を表すものではありません。