最新の安定バージョンについては、Spring Framework 6.2.6 を使用してください!

Spring Framework の概要

Spring を使用すると、Java エンタープライズアプリケーションを簡単に作成できます。JVM の代替言語として Groovy と Kotlin をサポートし、アプリケーションのニーズに応じてさまざまな種類のアーキテクチャを柔軟に作成できるため、エンタープライズ環境で Java 言語を採用するために必要なすべてが提供されます。Spring Framework 6.0 の時点で、Spring には Java 17+ が必要です。

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

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

"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" ) へのデプロイを許可しています。Jigsaw 対応のアプリケーションで使用するために、Spring Framework 5 の jar には、jar のアーティファクト名(jar は "." の代わりに "-" を使った同じ命名パターンに従っています。例: "spring-core", "spring-context" など)から独立して安定した言語レベルのモジュール名("spring.core" , "spring.context" など)を定義する「自動モジュール名」マニフェストエントリが付属しています。もちろん、Spring のフレームワーク jar は JDK 8 と 9 以降の両方でクラスパス上で問題なく動作します。

Spring と Spring Framework の歴史

Spring は、初期の J2EE [Wikipedia] 仕様の複雑さに対応するために 2003 年に誕生しました。Java EE とその現代の後継である Jakarta EE は Spring と競合していると考える人もいますが、実際にはそれらは補完的です。Spring プログラミングモデルは、Jakarta EE プラットフォーム仕様を採用していません。むしろ、従来の EE 包括的から慎重に選択された個々の仕様と統合されます。

Spring Framework は、依存性注入(JSR 330 (英語) )および共通アノテーション(JSR 250 (英語) )仕様もサポートします。これらの仕様は、アプリケーション開発者が Spring Framework によって提供される Spring 固有のメカニズムの代わりに使用することを選択できます。もともと、それらは一般的な javax パッケージに基づいていました。

Spring Framework 6.0 の時点で、Spring は、従来の javax パッケージの代わりに jakarta 名前空間に基づいて、Jakarta EE 9 レベル (例: Servlet 5.0+、JPA 3.0+) にアップグレードされました。最低限の EE 9 と EE 10 がすでにサポートされている Spring は、Jakarta EE API のさらなる進化にすぐに使用できるサポートを提供する準備ができています。Spring Framework 6.0 は、Web サーバーとしての Tomcat 10.1、Jetty 11、Undertow 2.3 と完全に互換性があり、Hibernate ORM 6.1 とも完全に互換性があります。

時間の経過とともに、アプリケーション開発における Java/Jakarta EE のロールは進化してきました。J2EE と 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 を参照してください。

設計哲学

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

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

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

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

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

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

フィードバックと貢献

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

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

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

入門

Spring プロジェクトを作成する場合は、Spring Boot を使用しましょう。Spring Framework は多くの選択肢と柔軟性を提供することと引き換えに、すべての構成を明示的に設定する必要がありますが、Spring Boot の場合は、それを補うために自動構成で、設定よりも規約を優先することにより、簡単に Spring ベースのアプリケーションを作成することができます。

Spring Initializr を使用してプロジェクトのひな形を生成するか、RESTful Web サービスの構築を開始するなどの「入門」ガイドを参照してください。これらのガイドは目的重視で、ほとんどは Spring Boot ベースです。また、特定の問題を解決する際に検討したい Spring とその他のプロジェクトの組み合わせもカバーしています。