Spring を使用すると、Java エンタープライズアプリケーションを簡単に作成できます。エンタープライズ環境で Java 言語を採用するために必要なすべてを提供し、JVM の代替言語として Groovy および Kotlin をサポートし、アプリケーションのニーズに応じてさまざまな種類のアーキテクチャを作成できる柔軟性を備えています。Spring Framework 5.1, 以降、Spring には JDK 8+(Java SE 8+)が必要であり、JDK 11 LTS の標準サポートを提供します。Java SE 8 update 60 は Java 8 の最小パッチリリースとして推奨されていますが、一般的には最新のパッチリリースを使用することをお勧めします。

Spring は、幅広いアプリケーションシナリオをサポートしています。大企業では、アプリケーションは長期間存在することが多く、開発者が制御できないアップグレードサイクルの JDK およびアプリケーションサーバーで実行する必要があります。他のサーバーは、サーバーが組み込まれた単一の jar として、おそらくクラウド環境で実行されます。さらに、サーバーを必要としないスタンドアロンアプリケーション(バッチまたは統合ワークロードなど)もあります。

Spring はオープンソースで、大規模で活発なコミュニティがあり、さまざまな実世界のユースケースに基づいて継続的なフィードバックを提供しています。これは、Spring が非常に長い時間をかけてうまく進化するのに役立ってきました。

1. 「Spring」の意味

「Spring」という用語は、文脈によって異なるものを意味します。Spring Framework プロジェクト自体を参照するために使用でき、時間の経過とともに、他の Spring プロジェクトは Spring Framework の上に構築されてきました。ほとんどの場合、「Spring」と言うときは、プロジェクトのファミリー全体を意味します。このリファレンスマニュアルでは、Spring Framework 自体の基盤に焦点を当てています。

Spring Framework はモジュールに分割されています。アプリケーションは、必要なモジュールを選択できます。中心にあるのは、構成モデルと依存性注入メカニズムを含む、コアコンテナーのモジュールです。さらに、Spring Framework は、メッセージング、トランザクションデータと永続性、Web など、さまざまなアプリケーションアーキテクチャの基本的なサポートを提供します。また、サーブレットベースの Spring MVC Web フレームワークと、並行して Spring WebFlux リアクティブ Web フレームワークも含まれています。

モジュールに関する注意 : Spring のフレームワーク jar は、デプロイから JDK 9 のモジュールパス(「Jigsaw」)を可能にします。ジグソー対応のアプリケーションで使用するために、Spring Framework 5 jar には、jar アーティファクト名から独立した安定した言語レベルのモジュール名(「spring.core」、「spring.context」など)を定義する「Automatic-Module-Name」マニフェストエントリが付属しています(jar は、「.」の代わりに「-」を使用した同じ命名パターンに従います(例:「spring-core」および「spring-context」)。もちろん、Spring のフレームワーク jar は、JDK 8 と 9+ の両方のクラスパスで正常に機能し続けます。

2. Spring と Spring Framework の歴史

Spring は、初期の J2EE 仕様の複雑さへの対応として 2003 年に登場しました。Java EE と Spring は競合していると考える人もいますが、実際には Spring は Java EE を補完します。Spring プログラミングモデルは、Java EE プラットフォーム仕様を採用していません。むしろ、EE から慎重に選択された個々の仕様と統合されます。

Spring Framework は、依存性注入(JSR 330 (英語) )および共通アノテーション(JSR 250 (英語) )仕様もサポートしています。これらの仕様は、Spring Framework によって提供される Spring 固有のメカニズムの代わりに使用することを選択できます。

Spring Framework 5.0, 以降、Spring は Java EE 7 レベル (例 : Servlet 3.1+、JPA 2.1+) を必要としますが、同時に、Java EE 8 レベルの新しい API (例 : Servlet 4.0、JSON バインディング API) と実行時に遭遇した場合に、すぐに使える統合を提供します。これにより、Spring は Tomcat 8 および 9、WebSphere 9, および JBoss EAP 7 などとの完全な互換性を維持します。

時間の経過とともに、アプリケーション開発における Java EE のロールは進化してきました。Java EE および Spring の初期の頃には、アプリケーションサーバーにデプロイするためのアプリケーションが作成されていました。今日、Spring Boot の助けを借りて、アプリケーションは、サーブレットコンテナーが埋め込まれ、変更が簡単な、devops およびクラウドフレンドリーな方法で作成されます。Spring Framework 5, 以降、WebFlux アプリケーションはサーブレット API を直接使用することすらなく、サーブレットコンテナーではないサーバー(Netty など)で実行できます。

Spring は、革新と進化を続けています。Spring Framework 以外にも、Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch などのプロジェクトがあります。各プロジェクトには、独自のソースコードリポジトリ、課題追跡、リリース頻度があることを覚えておくことが重要です。Spring プロジェクトの完全なリストについては、spring.io/projects を参照してください。

3. 設計哲学

フレームワークについて学ぶとき、それが何をするかだけでなく、どの原則に従うかを知ることが重要です。Spring Framework の基本原則は次のとおりです。

  • すべてのレベルで選択肢を提供します。Spring を使用すると、設計の決定をできるだけ遅らせることができます。例:コードを変更せずに構成を通じて永続性プロバイダーを切り替えることができます。他の多くのインフラストラクチャの懸念やサードパーティ API との統合についても同様です。

  • 多様な視点に対応します。Spring は柔軟性を取り入れており、物事をどのように行うべきかについては意見がありません。さまざまな視点で幅広いアプリケーションのニーズをサポートします。

  • 強力な下位互換性を維持します。Spring の進化は慎重に管理されており、バージョン間での重大な変更はほとんどありません。Spring は、Spring に依存するアプリケーションとライブラリのメンテナンスを容易にするために、慎重に選択された JDK バージョンとサードパーティライブラリの範囲をサポートしています。

  • API 設計に注意してください。Spring チームは、多くのバージョンと何年にもわたって直観的であり続ける API の作成に多くの考えと時間を費やしました。

  • コード品質の高い基準を設定します。Spring Framework は、意味のある最新の正確な javadoc に重点を置いています。これは、パッケージ間の循環依存関係がないクリーンなコード構造を主張できる非常に数少ないプロジェクトの 1 つです。

4. フィードバックと貢献

使い方の質問や課題の診断またはデバッグについては、Stack Overflow を使用することをお勧めします。Stack Overflow で使用する推奨タグのリストについては、こちらをクリック (英語) してください。Spring Framework に課題があると確信している場合、または機能を提案したい場合は、GitHub の課題 (英語) を使用してください。

解決策を考えているか、修正案があれば、Github (英語) でプルリクエストを送信できます。ただし、最も些細な課題を除くすべての課題については、チケットが課題トラッカーに提出され、そこで議論が行われ、将来の参照のために記録が残されることに留意してください。

詳細については、CONTRIBUTING: GitHub (英語) のトップレベルプロジェクトページのガイドラインを参照してください。

5. 入門

Spring Boot ベースのアプリケーションを作成して、Spring Framework の使用を開始できます。Spring Boot は、本番用の Spring ベースのアプリケーションを作成するための迅速な(そして独自の)方法を提供します。これは Spring Framework に基づいており、設定より規約を優先し、できるだけ早く起動して実行できるように設計されています。

start.spring.io (英語) を使用して、基本プロジェクトを生成するか、RESTful Web サービスの構築を開始するなどの「入門」ガイドのいずれかに従うことができます。消化しやすいだけでなく、これらのガイドは非常にタスク重視であり、それらのほとんどは Spring Boot に基づいています。また、特定の問題を解決する際に検討したい Spring ポートフォリオのその他のプロジェクトもカバーしています。