Spring Frameworkは、 Java プラットフォーム用のアプリケーション フレームワークおよび制御の反転コンテナです。[ 2 ]フレームワークのコア機能は、あらゆる Java アプリケーションで使用できますが、Jakarta EEプラットフォーム上にWeb アプリケーションを構築するための拡張機能があります。フレームワークは、特定のプログラミング モデルを強制しません。[ 3 ]このフレームワークは、 Enterprise JavaBeans (EJB) モデルへの追加として、Java コミュニティで人気を博しています。[ 4 ] Spring Framework は、無料のオープンソース ソフトウェアです。[ 5 ] : 121–122 [ 6 ]
最初のバージョンは、2002 年 10 月に彼の著書Expert One-on-One J2EE Design and Developmentの出版とともにフレームワークをリリースしたRod Johnsonによって書かれました。フレームワークは、2003 年 6 月にApache 2.0 ライセンスの下で初めてリリースされました。最初の製品リリースである 1.0 は、2004 年 3 月にリリースされました。[ 7 ] Spring 1.2.6 フレームワークは、2006 年にJolt 生産性賞とJAX イノベーション賞を受賞しました。 [ 8 ] [ 9 ] Spring 2.0 は 2006 年 10 月に、Spring 2.5 は 2007 年 11 月に、Spring 3.0 は 2009 年 12 月に、Spring 3.1 は 2011 年 12 月に、Spring 3.2.5 は 2013 年 11 月にリリースされました。[ 10 ] Spring Framework 4.0 は 2013 年 12 月にリリースされました。[ 11 ] Spring 4.0 の注目すべき改善点には、Java SE (Standard Edition) 8 のサポートが含まれます。Groovy 2 [ 12 ] [ 13 ] Java EE 7 のいくつかの側面、およびWebSocket [ 14 ]
Spring Framework 4.2.0 は 2015 年 7 月 31 日にリリースされ、すぐにバージョン 4.2.1 にアップグレードされ、2015 年 9 月 1 日にリリースされました。[ 15 ]これは「コアの改良と最新の Web 機能に重点を置き、Java 6、7、8 と互換性があります」。[ 16 ]
Spring Framework 4.3 は 2016 年 6 月 10 日にリリースされ、2020 年までサポートされました。[ 17 ]これは、「一般的な Spring 4 システム要件 (Java 6 以降、Servlet 2.5 以降) の最終世代となる」と発表されました。[ 16 ]
Spring 5 は、Reactive Streams互換の Reactor Core をベースに構築されました。[ 18 ]
Spring Framework 6.0 は 2022 年 11 月 16 日にリリースされ、Java 17+ ベースラインと Jakarta EE 9+ (名前空間内) への移行が伴い、 Servlet 6.0 や JPA 3.1 などのjakarta最近リリースされた Jakarta EE 10 APIに重点が置かれています。 [ 19 ]
Spring Frameworkには、さまざまなサービスを提供する複数のモジュールが含まれています。
BeanFactoryおよびApplicationContext) を提供します。[ 21 ] [ 22 ] [ 23 ]このコンテキストでは、はグループに属するコア モジュール[ 25 ]spring-coreにあるアーティファクト[ 24 ]です。[ 26 ]アーティファクトは、IoC コンテナと、アプリケーション全体で使用されるユーティリティ クラス[ 24 ]で構成されています。 [ 27 ]org.springframeworkspring-corespring-aopAOPフレームワークの成果物である。[ 25 ]spring-jdbcspring-websocket。spring-oxm。SpringモジュールはJARファイルとしてパッケージ化されています。[ 47 ]これらのアーティファクトは、 Maven [ 48 ]またはGradle [ 49 ]を使用してMaven Central Repository経由でアクセスできます。
制御の反転( IoC) コンテナは Spring Framework の中核となるコンテナです。[ 2 ]これは、リフレクションを使用してJava オブジェクトを構成および管理するための一貫した手段を提供します。[ 2 ] [ 5 ] : 127–131 [ 50 ]コンテナは、特定のオブジェクトのオブジェクト ライフサイクルを管理する責任があります。 [ 5 ] : 128これらのオブジェクトを作成し、[ 51 ]初期化メソッドを呼び出し、 [ 50 ]これらのオブジェクトをワイヤリングして構成します。[ 52 ]
多くの場合、Spring Framework の他の部分を使用する場合はコンテナを使用する必要はありませんが、コンテナを使用するとアプリケーションの設定とカスタマイズが容易になる可能性が高いです。Spring コンテナは、アプリケーションを設定するための一貫したメカニズムを提供し[ 5 ] : 122、小規模アプリケーションから大規模なエンタープライズアプリケーションまで、ほぼすべての Java 環境と統合されます。
プログラマーはオブジェクトを直接作成するのではなく、Spring設定ファイルで定義することで、その作成方法を記述します。同様に、サービスやコンポーネントも直接呼び出されるのではなく、Spring設定ファイルで呼び出すべきサービスやコンポーネントを定義します。このIoC(制御の相互運用性)は、保守とテストの容易性を向上させることを目的としています。
コンテナによって作成されるオブジェクトは、管理対象オブジェクトまたはビーンと呼ばれます。[ 53 ]コンテナは、XML(拡張マークアップ言語)ファイル[ 51 ] [ 5 ] : 151-152をロードするか、構成クラスの特定のJavaアノテーションを検出することによって構成できます。これらのデータソースには、ビーンを作成するために必要な情報を提供するビーン定義が含まれています。
これは@Configuration、クラスを構成クラスとしてマークする Spring 固有のアノテーションです。構成クラスは Spring に Bean を提供しますApplicationContext。[ 54 ] Spring 構成クラスの各メソッドは、この@Beanアノテーションで構成されます。ApplicationContextインターフェースは、このアノテーションで構成されたオブジェクトを@BeanBean として返します。Java ベースの構成は、XML ベースの構成に比べて、型安全性とリファクタリング性に優れています。[ 54 ]
制御の反転にはいくつかの種類があります。依存性注入と依存性ルックアップは、制御の反転の例です。[ 55 ]オブジェクトは、依存性ルックアップまたは依存性注入のいずれかによって取得できます。[ 5 ] : 127 [ 56 ]
依存性注入は、コンテナがコンストラクタ、[ 5 ] : 128プロパティ、またはファクトリ メソッドを介して、オブジェクトを名前で他のオブジェクトに渡すパターンです。依存性注入を実装する方法はいくつかあります。コンストラクタベースの依存性注入、セッターベースの依存性注入、フィールドベースの依存性注入です。[ 57 ]
依存関係検索とは、呼び出し元がコンテナオブジェクトに対して、特定の名前または特定の型のオブジェクトを要求するパターンです。
Springフレームワークには、自動ワイヤリングと呼ばれる機能があり、Springコンテナを使用して、JavaBeanプロパティで指定された依存関係を現在のファクトリ内の適切な型のオブジェクトに自動的に満たします。[ 58 ]これは、適切な型のオブジェクトが1つしかない場合にのみ発生します。[ 58 ]
POJO の自動ワイヤリングに使用できるアノテーションはいくつかあり、Spring 固有のアノテーション@Autowire(および、@Qualifierや@Primaryアノテーションなどの自動ワイヤリングの曖昧さを解消するのに役立つ他のいくつかの Spring 固有のアノテーション)、[ 59 ] [ 60 ]および標準 Java アノテーション@Resourceと@Inject. [ 61 ]が含まれます。
この@Qualifierアノテーションは、Beanを定義するクラスに使用して、Springに名前による自動ワイヤリング時にBeanの作成を優先するように指示することができます。[ 60 ]
この@Primaryアノテーションは、Beanを定義するクラスに使用して、Springに型による自動ワイヤリング時にBeanの作成を優先するように指示することができます。[ 60 ]
このアノテーションは、 JSR 250@Resource (Javaプラットフォームの共通アノテーション)に準拠したアノテーションであり、名前によるPOJOへの参照の自動ワイヤリングに使用されます。[ 61 ]
この@Injectアノテーションは、JSR 300(インジェクションのための標準アノテーション)に準拠したアノテーションであり、型によるPOJOへの参照の自動ワイヤリングに使用されます。[ 61 ]
Spring Framework には、横断的な関心事をアスペクトにモジュール化する独自のアスペクト指向プログラミング(AOP) フレームワークがあります。[ 62 ]独立した AOP フレームワークを作成する動機は、設計、実装、構成のいずれにおいても過度に複雑にすることなく、基本的な AOP 機能を提供することです。Spring AOP フレームワークは Spring コンテナを最大限に活用します。
Spring AOPフレームワークはプロキシパターンベースです。[ 63 ] [ 25 ]実行時に構成されます。これにより、コンパイル手順やロード時のウィービングが不要になります。一方、インターセプトは、ジョインポイントにある既存のオブジェクトに対してパブリックメソッドの実行のみを許可します。
AspectJフレームワークと比較すると、Spring AOP は強力ではありませんが、複雑さも少なくなっています。Spring 1.2 には、コンテナ内で AspectJ アスペクトを構成するサポートが含まれています。Spring 2.0 では、AspectJ との統合がさらに強化されました。たとえば、ポイントカット言語が再利用され、Spring AOP ベースのアスペクトと混在させることができます。さらに、Spring 2.0 では、宣言的トランザクション管理[ 63 ]や AspectJ コンパイル時またはロード時のウィービングによる依存性注入[ 64 ]などの共通の Spring 機能を提供するAspectJ を使用する Spring Aspects ライブラリが追加されました。SpringSourceは、Spring Roo や Spring Insight などの他の Spring プロジェクトで AspectJ AOP を使用しており、Spring Security は AspectJ ベースのアスペクトライブラリを提供しています。
Spring AOP は Spring Framework 内の横断的関心事を扱うように設計されています。[ 5 ] : 473コンテナによって作成および構成されたオブジェクトはすべて Spring AOP を使用して拡張できます。
Springフレームワークのバージョン2.0以降、AOPの設定に関して2つのアプローチが提供されています。
<beans xmlns= "http://www.springframework.org/schema/beans" xmlns:mvc= "http://www.springframework.org/schema/mvc" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:aop= "http://www.springframework.org/schema/aop" xmlns:context= "http://www.springframework.org/schema/context" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd" >Springチームは、AOP関連の新しい用語を導入しないことを決定しました。そのため、SpringのリファレンスドキュメントやAPIでは、アスペクト、ジョインポイント、アドバイス、ポイントカット、導入、ターゲットオブジェクト(アドバイスオブジェクト)、AOPプロキシ、ウィービングといった用語は、他のほとんどのAOPフレームワーク(特にAspectJ)と同じ意味を持ちます。
Spring のデータアクセスフレームワークは、アプリケーションでデータベースを扱う際に開発者が直面する一般的な困難に対処します。Java でよく使われるすべてのデータアクセスフレームワークがサポートされています。JDBC、iBatis / MyBatis、[ 33 ] Hibernate、[ 33 ] Java Data Objects (JDO、5.x 以降は廃止)、[ 33 ] Jakarta Persistence API (JPA)、[ 33 ] Oracle TopLink、Apache OJB、Apache Cayenneなどです。
Springは、これらのサポート対象フレームワークすべてに対して、以下の機能を提供します。
これらの機能はすべて、Springがサポートする各フレームワーク用に提供するテンプレートクラスを使用すると利用可能になります。 [ 68 ]批評家は、これらのテンプレートクラスは侵入的であり、(たとえば) Hibernate APIを直接使用する場合と比べて利点がないと述べています。[ 69 ]これに対し、Springの開発者は、HibernateおよびJPA APIを直接使用できるようにしました。ただし、アプリケーションコードがデータベースリソースの取得とクローズの責任を負わなくなるため、透過的なトランザクション管理が必要となり、[ 70 ]例外変換もサポートされません。[ 71 ]
Springのトランザクション管理とデータアクセスフレームワークを組み合わせることで、データアクセスフレームワークを扱うための柔軟な抽象化が実現します。Spring Frameworkは共通のデータアクセスAPIを提供しません。その代わりに、サポートされているAPIの機能をそのまま維持します。Spring Frameworkは、アプリケーションサーバーやコンテナ以外で管理されたデータアクセス環境を提供するJavaで利用可能な唯一のフレームワークです。[ 72 ]
HibernateでSpringを使用してトランザクション管理を行う場合、以下のBeanを設定する必要がある場合があります。
Datasourcecom.mchange.v2.c3p0.ComboPooledDataSourceorg.apache.commons.dbcp.BasicDataSourceSessionFactoryいいね[ 73 ] [ 5 ] : 173org.springframework.orm.hibernate3.LocalSessionFactoryBeanDataSourceHibernateProperties[ 5 ] : 173いいねorg.springframework.beans.factory.config.PropertiesFactoryBeanTransactionManagerいいね[ 73 ]org.springframework.orm.hibernate3.HibernateTransactionManagerSessionFactoryその他の設定項目は以下のとおりです。
Springのトランザクション管理フレームワークは、Javaプラットフォームに抽象化メカニズムをもたらします。[ 74 ]その抽象化には以下の機能があります。
それに対し、Java Transaction API(JTA)はネストされたトランザクションとグローバルトランザクションのみをサポートし、アプリケーションサーバー(場合によってはアプリケーションサーバーへのアプリケーションのデプロイ)を必要とします。
Spring Frameworkには、多数のトランザクション管理戦略のためのPlatformTransactionManager[ 76 ]が付属しています。
JtaTransactionManager[ 77 ] [ 5 ] : 255–257およびUserTransaction[ 5 ] : 234この抽象化メカニズムに加えて、フレームワークはアプリケーションにトランザクション管理を追加するための2つの方法を提供します。
TransactionTemplate[ 78 ]を使用することで@Transactionalを使用することによって([ 63 ]など)。Springのデータアクセスフレームワーク(トランザクション管理フレームワークを統合)と組み合わせることで、JTAやEJBに頼ることなく、設定を通じてトランザクションシステムを構築することが可能です。トランザクションフレームワークは、メッセージング[ 79 ]やキャッシング[ 80 ]エンジンとも統合されています。

Spring Framework には、当初は計画されていなかった独自のモデル・ビュー・コントローラー(MVC) Web アプリケーション フレームワークが搭載されています。[ 36 ] Spring の開発者たちは、当時人気だったJakarta Struts Web フレームワークの設計が不十分であると感じたこと、および他の既存のフレームワークの欠点に反発し、独自の Web フレームワークを開発することにしました。 [ 81 ]特に、プレゼンテーション層とリクエスト処理層の間、およびリクエスト処理層とモデルの間の分離が不十分であると感じていました。[ 82 ]
Struts と同様に、Spring MVC はリクエストベースのフレームワークです。[ 5 ] : 375このフレームワークは、最新のリクエストベースのフレームワークが処理しなければならないすべての責任に対して、戦略インターフェース[ 5 ] : 144を定義します。各インターフェースの目標は、シンプルで明確であるため、Spring MVC ユーザーが必要に応じて独自の実装を簡単に記述できるようにすることです。MVC は、よりクリーンなフロントエンド コードへの道を開きます。すべてのインターフェースは、Servlet APIと密接に結合しています。Servlet API とのこの密接な結合は、Web ベースのアプリケーションに対して高いレベルの抽象化を提供できなかった Spring 開発者側の失敗と見なされることがあります。しかし、この結合により、Servlet API の機能が開発者に利用可能であり続ける一方で、Servlet API を扱いやすくするための高い抽象化フレームワークが提供されます。
このDispatcherServletクラスはフレームワークのフロントコントローラ[ 83 ]であり、 HTTPリクエストの実行フェーズ中にさまざまなインターフェースに制御を委譲する役割を担っています。[ 84 ]
Spring MVC で定義されている最も重要なインターフェースとその責任を以下に示します。[ 85 ]
Controller: と の間に入りModel、View受信リクエストを管理し、適切なレスポンスにリダイレクトします。[ 86 ]Controllerは、HTTP リクエストを対応するメソッドにマッピングします。[ 87 ]Modelは、受信情報を方向付けるゲートとして機能します。との間を切り替えますView。HandlerAdapter: 受信リクエストを処理するオブジェクトの実行を担当します。[ 88 ]HandlerInterceptor: 受信リクエストを傍受する役割を担います。[ 88 ]サーブレットフィルタ[ 5 ] : 509に似ていますが、同一ではありません(使用は任意であり[ 5 ] : 511によって制御されませんDispatcherServlet)。HandlerMapping: 受信リクエストを処理するオブジェクト (ハンドラー) を、それらのリクエストの内部または外部の属性または条件に基づいて選択する責任があります[ 84 ]LocaleResolver:個々のユーザーのロケールを解決し、必要に応じて保存する役割を担う。 [ 89 ]MultipartResolver: 受信リクエストをラップすることで、ファイルアップロードの処理を容易にします。[ 90 ]View: クライアントにレスポンスを返す責任があります。 にはViewビジネスロジックを含めるべきではなく、 によってカプセル化されたデータのみを表示する必要がありますModel。[ 36 ]View一部のリクエストはを経由せずに に直接送られる場合がありModel、その他は 3 つすべてを経由する場合があります。ViewResolverView:論理名に基づいて選択する責任があるView[ 91 ] [ 92 ] (使用は厳密には必須ではない[ 5 ] : 511 )。Model: ビジネスデータのカプセル化を担当します。[ 91 ]Modelコントローラーによってビューに公開されます。[ 5 ] : 374 (使用は厳密には必須ではありません)。上記の各戦略インターフェースは、フレームワーク全体において重要な役割を担っています。これらのインターフェースが提供する抽象化は強力であるため、実装にさまざまなバリエーションを持たせることができます。[ 5 ]: 144 Spring MVC には、これらのインターフェースの実装がすべて含まれており、Servlet API の上に機能セットを提供しています。ただし、開発者やベンダーは、他の実装を自由に作成できます。Spring MVC は、キーが値であると想定されるjava.util.Mapデータ指向の抽象化として Java インターフェースを使用します。ModelString
これらのインターフェースの実装を簡単にテストできることは、Spring MVC が提供する高レベルの抽象化の重要な利点の 1 つです。[ 93 ] [ 5 ] : 324DispatcherServletは、アプリケーションの Web レイヤーを構成するための Spring 制御反転コンテナと密接に結合しています。ただし、Web アプリケーションは、コンテナを含む Spring Framework の他の部分を使用して、Spring MVC を使用しないことを選択できます。
ユーザーが Web ブラウザーでリンクをクリックしたりフォームを送信したりすると、リクエストは Spring に送信されますDispatcherServlet。はSpring MVC のフロント コントローラーDispatcherServletです。 [ 84 ] [ 94 ]は高度にカスタマイズ可能で柔軟です。[ 94 ]具体的には、やアノテーション付きクラスの実装よりも多くのタイプのハンドラーを処理できます。[ 94 ]は 1 つ以上のハンドラー マッピングを参照します。[ 84 ]は適切なコントローラーを選択し、リクエストを転送します。 は特定のリクエストを処理し、結果を生成します。これは と呼ばれます。この情報は HTML またはJakarta Server Pages (JSP とも呼ばれる) [ 84 ] [ 95 ]やThymeleaf [ 95 ]などのフロントエンド テクノロジーでフォーマットする必要があります。これはアプリケーションの です。[ 84 ]すべての情報は およびオブジェクトにあります。コントローラーが特定のビューに結合されていない場合、は の助けを借りて実際の(JSP など)を見つけます。[ 84 ] [ 5 ] : 390–391DispatcherServletorg. springframework.web.servlet.mvc.Controllerorg. springframework.stereotype.ControllerDispatcherServletControllerModelViewModelViewDispatcherServletViewViewResolver
サーブレット仕様バージョン3.0以降、DispatcherServletを構成する方法はいくつかあります。[ 96 ]
web.xml以下のように設定することで: [ 96 ]<servlet> <servlet-name> MyServlet </servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> </servlet><servlet-mapping> <servlet-name> MyServlet </servlet-name> <url-pattern> / <url-pattern> </servlet-mapping>Springのリモートアクセスフレームワークは、クライアント接続とサーバー上のオブジェクトのマーシャリングの両方でJavaプラットフォームで利用可能なさまざまなRPC(リモートプロシージャコール)ベースのテクノロジーを操作するための抽象化です。 [ 97 ]このフレームワークが提供する最も重要な機能は、制御の反転とAOPを組み合わせることで、これらのテクノロジーの構成と使用を可能な限り容易にすることです。
このフレームワークは、障害回復機能(接続障害後の自動再接続)と、EJBリモートステートレスセッションビーンのクライアント側での使用に関するいくつかの最適化機能を提供します。
Springはこれらのプロトコルと製品を標準でサポートしています。
Apache CXF は、サーバー側で RPC スタイルのオブジェクトエクスポートを行うための Spring Framework との統合を提供します。[ 100 ]
Spring Remote AccessフレームワークがサポートするすべてのRPCスタイルのプロトコルおよび製品(Apache Axisのサポートを除く)のクライアントとサーバーの設定は、Spring Coreコンテナ内で構成されます。
Spring Frameworkには、リモート処理のさまざまな方式(1対1、1対多、動的サービス検出)をサポートすることを目的とした、代替のオープンソース実装(Cluster4Spring)が含まれています。
Spring Boot Extension は、スタンドアロンで本番環境レベルの[ 101 ] Spring ベースのアプリケーションを「すぐに実行」できるものを作成するための Spring の規約優先構成ソリューションです。 [ 102 ] Spring チームの「意見」[ 103 ] [ 104 ]に基づいてSpring プラットフォームとサードパーティ ライブラリの最適な構成と使用方法が事前に構成されているため、最小限の手間で開始できます。ほとんどの Spring Boot アプリケーションは Spring の構成をほとんど必要としません。[ 105 ]
主な特徴:
Spring Rooは、 Javaアプリケーションを迅速に構築するために、設定よりも規約を重視するコード生成ベースのアプローチを提供するコミュニティプロジェクトです。現在、Spring Framework、Spring Security、Spring Web Flowをサポートしています。Rooは、他の高速アプリケーション開発フレームワークとは異なり、以下の点に重点を置いています。
Spring Batchはバッチ処理のためのフレームワークであり、大量のレコードを処理する際に不可欠な再利用可能な関数を提供します。これには以下が含まれます。
最適化とパーティショニング[ 112 ]技術により、極めて大量の[ 113 ]高性能バッチジョブ[ 112 ]を可能にする、より高度な技術サービスと機能を提供します。
Spring Batch は一連のジョブを実行します。ジョブは複数のステップで構成され、各ステップは「READ-PROCESS-WRITE」タスクまたは単一操作タスク (タスクレット) で構成されます。「単一」操作タスクはタスクレットとも呼ばれます。[ 114 ]これは、ステップの開始または完了の前後にリソースをクリーンアップするなど、単一のタスクのみを実行することを意味します。
「READ-PROCESS-WRITE」プロセスは、リソース(カンマ区切り値(CSV)、XML、またはデータベース)からデータを「読み込み」、それを「処理」し、他のリソース(CSV、XML、またはデータベース)に「書き込む」というステップで構成されます。たとえば、あるステップでは、CSV ファイルからデータを読み込み、[ 114 ]処理して、データベースに書き込むことができます。Spring Batch は、CSV、XML、およびデータベースの読み書きを行うためのクラスを多数提供しています。[ 115 ]
これらの手順は連結してジョブとして実行できます。[ 114 ]
Spring Integrationは、エンタープライズアプリケーション統合のためのフレームワークであり、メッセージングやイベント駆動型アーキテクチャに不可欠な再利用可能な機能を提供します。
@ServiceActivatorこの機能を必要とするコンポーネントを宣言するためのアノテーションの使用をサポートしています。[ 121 ]SimpleMessagingGateway、ゲートウェイに不可欠なサポートを提供します。SimpleMessagingGatewayこれにより、Spring アプリケーションは、リクエストを送信するチャネルと、レスポンスを受信するチャネルを指定できます。の主な焦点はSimpleMessagingGatewayペイロードの処理であり、これによりクライアントは送信および受信メッセージの複雑な詳細から解放されます。SimpleMessagingGatewayはチャネルとともに使用され、ファイルシステム、JMS、電子メール、またはペイロードとチャネルを必要とするその他のシステムとの統合を可能にします。[ 122 ]@Splitterこの機能を必要とするコンポーネントを宣言するためのアノテーションをサポートしています。[ 123 ]@Aggregatorこの機能が必要なコンポーネントを宣言するためのアノテーションをサポートしています。[ 123 ]Spring Integrationは、パイプアンドフィルターベースのアーキテクチャをサポートしています。
データ ストリームを効果的に処理するための重要なルールは、決してブロックしないことです。[ 124 ] WebSocket はこの問題に対する有効な解決策です。[ 124 ] WebSocket プロトコルは、 TCP 接続上で全二重通信チャネルを可能にする低レベルのトランスポート プロトコルです。WebSocket は、クライアントとサーバー間の双方向通信を可能にする HTTP の代替として機能します。WebSocket は、高速かつ大量の小さなデータ チャンクを頻繁かつ迅速に交換する必要があるアプリケーションに特に役立ちます。[ 124 ]
Spring は、リアクティブ アプリケーション用の WebSocket API を提供することで、WebSocket プロトコルをサポートしています。この@EnableWebSocketアノテーションを Spring 構成クラスに配置すると、WebSocket リクエスト処理機能が提供されます。必須のインターフェースは であり、WebSocketConfigurerへのアクセスを許可しますWebSocketConfigurer。次に、registerWebSocketHandlers(WebSocketHandlerRegistry) メソッドを実装することで、Websocket URL が関連するハンドラにマッピングされます。[ 125 ]
Spring WebFluxは、関数型プログラミングパラダイムに従うフレームワークであり、リアクティブなSpringアプリケーションを構築するために設計されています。このフレームワークは、関数型プログラミングとリアクティブストリームを幅広く使用しています。Spring WebFluxの優れたユースケースは、チャット機能を備えたWebアプリケーションのように、瞬時に情報を送受信する必要があるアプリケーションです。[ 126 ]
Spring WebFluxテクノロジーを使用するアプリケーションは、MVCアプリケーションに比べて可読性は劣ることが多いものの、より堅牢で拡張しやすい。[ 127 ] Spring WebFluxは、スレッドアクセスの同期に伴う複雑さに対処する必要性を軽減する。[ 127 ]
Spring WebFluxは、サーバープッシュ技術であるサーバー送信イベント(SSE)をサポートしており、クライアントはHTTP接続を介してサーバーから自動更新を受け取ることができます。この通信は一方向であり、JMSのpublish/subscribeモデルと多くの類似点があります。[ 124 ]
Pitchforkプロジェクトを使用すれば、コンテナを部分的にEJB(Enterprise JavaBeans)3.0準拠のコンテナにすることができます。Spring Frameworkが標準に準拠していないと批判する人もいます。 [ 128 ]しかし、SpringSourceはEJB 3準拠を主要な目標とは考えておらず、Spring Frameworkとコンテナによってより強力なプログラミングモデルが可能になると主張しています。[ 129 ]
Spring Framework の特定のバージョンに影響を与えるリモート コード実行の脆弱性が、2022 年 4 月に CVE - 2022-22965 として公開されました。これは、最近発生したLog4Shell の脆弱性にちなんでSpring4Shellと名付けられました。どちらも、攻撃者が脆弱なマシン上でシェル アクセス[ 130 ]や完全な制御[ 131 ]を取得できるという同様の概念実証があります。
{{cite web}}:欠落または空欄|title=(ヘルプ)