Spring 5は2017年末にリリースされました。Spring 5はSpringフレームワークに大規模なアップデートをもたらします。Spring 4は2013年にリリースされましたので、フレームワークの大幅な改訂が期待されていました。Springフレームワークの新機能を見るのがとても嬉しいです。
Spring 5の特徴
Spring 5の特徴は大まかに以下のカテゴリに分けることができます:
- Javaベースラインのサポート
- Core APIの拡張
- Spring Web MVCの改良
- Spring WebFlux
- Kotlinサポートによる関数型プログラミング
- テストの改善
- 非推奨のサポートと削除されたパッケージ
Javaベースラインのサポート
- Spring 5はJava 8で動作しますので、Springコードはラムダ式を活用してコードの可読性を向上させることができます。
- また、Spring 5はJava 9もサポートしているので、モジュールベースのアーキテクチャでアプリケーションを作成することもできます。
- Spring 5はJava EE 7をサポートし、またJava EE 8とも互換性があります。そのため、アプリケーションでServlet 4.0、Bean Validation 2.0、JPA 2.2を使用することができます。また、Servlet 3.1、Bean Validation 1.1、JPA 2.1などの古いバージョンも使用することができます。
- Spring 5アプリケーションでは、Tomcat 8.5+、Jetty 9.4+、WildFly 10+のサーバーバージョンが推奨されています。
I really like that spring 5 is trying to catch up to the latest version of different technologies.
Core APIの強化
- パッケージレベルでの非null APIの宣言。null可能な引数、フィールド、戻り値には明示的に
@Nullable
アノテーションが付与されます。 - ファイル操作はNIO 2ストリームを使用して行われます。つまり、FileInput/Output Streamは使用されません。これは、ファイルベースのアプリケーションにとって非常に優れた強化とパフォーマンス向上です。
- Spring Framework 5.0には独自のCommons Loggingブリッジである
spring-jcl
が付属しています。 - クラスパスのスキャンではなく、”META-INF/spring.components”というインデックスファイルを通じてSpringコンポーネント情報を提供するサポートがあります。これにより、大規模なSpringプロジェクトや多くのSpringコンポーネントを持つ場合に、起動時間が大幅に改善されます。また、開発者にとっても便利です。なぜなら、指定されたファイルを直接確認することでアプリケーションのエントリーポイントを探す必要がなくなるからです。
Spring Web MVC の改良点
Spring MVC モジュールは、最新の Java EE テクノロジーを使用するように大幅に改良されました。主な改良点は次のとおりです:
- Spring が提供する
Filter
実装における完全な Servlet 3.1 シグネチャのサポート。 - Spring MVC コントローラーメソッドで Servlet 4.0
PushBuilder
引数をサポート。 - 一般的なサーバーでの Servlet 3.0 マルチパート解析に対する MaxUploadSizeExceededException。
- MediaTypeFactory デリゲートを介した一般的なメディアタイプの統一サポート。
- 不変のオブジェクトを使用したデータバインディング:Kotlin、Lombok、@ConstructorProperties。
- Jackson や GSON の代替としてのJSON バインディング APIのサポート。
- Spring MVC コントローラーメソッドからの戻り値として、Reactor 3.1 FluxやMono、RxJava 1.3 および 2.1 のサポート。
@ResponseStatus
のプログラム的な代替としてのResponseStatusException
のサポート。
Spring WebFlux
Spring WebFluxは新しいモジュールで、これはspring-webmvc
モジュールの代替となり、リアクティブフレームワーク上に構築されています。このモジュールは、イベントループ実行モデルを基にした完全に非同期でノンブロッキングなアプリケーションを作成するために使用されます。
- Spring-core内のリアクティブインフラストラクチャは、オブジェクトのエンコードとデコードのためのエンコーダーおよびデコーダーなどが含まれます。
- @Controllerスタイルは、注釈ベースのプログラミングモデルであり、Spring MVCと類似していますが、WebFluxでサポートされ、リアクティブスタック上で実行されます。
- 新しいWebClientは、HTTP呼び出し用の機能的でリアクティブなAPIを備えており、RestTemplateと比較可能ですが、フルエントAPIを介して非同期およびストリーミングシナリオでWebFluxインフラストラクチャに基づいて優れています。
Kotlinサポートを備えた関数型プログラミング
Spring 5は、今ではKotlinプログラミングもサポートしています。これは、Javaが関数型プログラミングに向かっているように、関数型プログラミングをサポートする大きな進歩です。
- NullセーフAPIのサポート
- Kotlinのイミュータブルクラスのサポートもあり、オプションのパラメータとデフォルト値が使用されています。
- Kotlinの再ified型パラメータを活用して、RestTemplateやWebFlux APIなどのさまざまなAPIで明示的にクラスを指定せずにシリアライズ/デシリアライズに使用するサポート。
- Kotlinのオプションパラメータを持つ@Autowiredコンストラクタへの対応。
- Kotlinのnull安全サポート、@Autowired/@Injectおよび@RequestParam/@RequestHeader/などの注釈に対するサポート。
テストの改善
- JUnit 5のサポート
- Spring TestContext Frameworkでの並列テスト実行のサポート
非推奨のサポートと削除されたパッケージ
- パッケージ
spring-aspects
からbeans.factory.access
、jdbc.support.nativejdbc
、mock.staticmock
が削除されました。 - パッケージ
web.view.tiles2
およびorm.hibernate3/hibernate4
が削除されました。これは、Spring 5を使用する予定であればHibernate 5も使用する必要があるということを意味します。 - 旧技術Portlet、Velocity、JasperReports、XMLBeans、JDO、Guavaのサポートが廃止されました。これらのいずれかを使用している場合は、他の技術に移行するか、Spring 4にとどまるかのいずれかです。
これがSpring 5の機能の簡単な概要です。参考:Spring GitHub Doc
Source:
https://www.digitalocean.com/community/tutorials/spring-5