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 Framework の jar では、モジュールパス (Java モジュールシステム) への デプロイが許可されます。モジュール対応アプリケーションで使用するために、Spring Framework jar には、jar アーティファクト名とは独立した安定した言語レベルのモジュール名 (spring.core
、spring.context
など) を定義する Automatic-Module-Name
マニフェストエントリが付属しています。jar は、.
ではなく -
を使用した同じ命名パターンに従います (例: spring-core
および spring-context
)。もちろん、Spring Framework の jar もクラスパスで正常に動作します。
Spring と Spring Framework の歴史
Spring は、初期の J2EE [Wikipedia] 仕様の複雑さに対応するために 2003 年に誕生しました。Java EE とその現代の後継である Jakarta EE は Spring と競合していると考える人もいますが、実際にはそれらは補完的です。Spring プログラミングモデルは、Jakarta EE プラットフォーム仕様を採用していません。むしろ、従来の EE 包括的から慎重に選択された個々の仕様と統合されます。
サーブレット API ( JSR 340 (英語) )
WebSocket API ( JSR 356 (英語) )
同時実行ユーティリティ ( JSR 236 (英語) )
JSON バインディング API ( JSR 367 (英語) )
Bean バリデーション ( JSR 303 (英語) )
JPA ( JSR 338 (英語) )
JMS ( JSR 914 (英語) )
必要に応じて、トランザクション調整のための JTA/JCA セットアップも行います。
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 とその他のプロジェクトの組み合わせもカバーしています。