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.corespring.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 包括的から慎重に選択された個々の仕様と統合されます。

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 とその他のプロジェクトの組み合わせもカバーしています。