私は私を感動させる春5、インタビュアーの新機能に答えます

最近では、小型のパートナーは、インタビュアーが春についてのより多くの問題を彼に尋ねた彼は、最も満足度が、自分の知識の春5回答についての質問に答えるために面接をさせることですだことを彼に話しのプロセスを提供して自分の満足感を得ました良いです。

2017年9月におけるSpring5は、それが2013年12月以来、春の最初のメジャーリリースである、一般的なリリースを発行しました。これは、いくつかの待望の改善はまた、スタイルの原則を反映するために、新しいプログラミングパラダイムを採用しています。

このバージョンでは、長い時間が最もエキサイティングなバージョンです。スプリング5は、Java™8とJDK 9、エンドポイントを達成するための便利な後続の破壊方法を提供するために、フロー型反応を統合し、Webアプリケーションの開発と互換性があります。

もちろん、これは重要な特性についてとても多くのプログラマはまだ興奮し、テーマのほんの反応性プログラミングバージョンではありません。春5はよく、この需要を満たすために位置付け、増加していることがシームレスに災害復旧や負荷変動に対して応答サービスを拡張できるようにする必要があります。

ここでKotlinによって関数型プログラミングのためのJava SE 8およびJava EE 7 APIのアップグレード、新しい反応性プログラミングモデルの春5、HTTP / 2のサポート、そして春のフルサポートの基本的な内容です。私たちは、最後の一般的なコアのリビジョンとSpringコンテナを導入し、簡単なテストおよびパフォーマンスの機能強化を紹介します。

Java SEの8とJava EE 7にアップグレード

前の春には、「古い荷物」解放から放棄され、春5のJavaバージョンの一部を支援してきました。Java機能8を最大限に活用するために、そのコードベースを向上させる、およびJava 8 JDKバージョンの最小値を必要とされています。

スプリング5は、パス(パスおよびモジュール)に基づくJava 9と完全に互換性があり、それがJDK 9テストスイートをテストされています。Javaの9人の愛好家には、これは良いニュースです。

APIレベルでは、春5は、Servlet 4.0、豆の検証2.0と新しいJSONバインディングAPIのための需要を満たすために、Java EE 8テクノロジと互換性があります。V7のための最小要件のJava EE APIは、このバージョンでは、サーブレット、JPAとビーン検証APIのためのマイナーバージョンを紹介します。

リアクティブプログラミングモデル

最もエキサイティングな新機能の春5は、その反応性プログラミングモデルです。春5を構築反応の基礎に基づいて、完全に非同期および非ブロックです。スレッドの少量のみが、新しいイベントループの実行モデルは縦に拡張することができます。

反応スキームを使用してバネ5は、反応式アセンブリ内の負圧の流れを拡散するためのメカニズムを提供します。負圧は、複数の生産者からのデータを圧倒ユーザーの考え方をすることはありませんようにすることです。

アノテーションベースのモデルおよび機能WebFramework(WebFlux.fn):スプリングバネWebFluxは、Spring Web開発者のために設計されたプログラミングのための2つのプログラミング・モデルを提供する反応性コア5、です。

注釈ベースのSpringのWeb MVCモデルが構築されている土台の反応に基づく近代的な代替モデルであり、かつ機能的なWebフレームワークは、代替@Controller注釈プログラミングモデルをベースにしています。これらのモデルは、反応性ノンブロッキングHTTPストリーミングAPIに対応するために調整し、同じ反応規則、によって運営されています。

プログラムに注釈を使用します

ウェブMVCプログラマは、Springのアノテーションベースのプログラミングモデル5、5は、同じノートを使用して、春のWeb MVCの@Controllerプログラミングモデルを調整すると非常に精通している必要があります。

次のコードBookControllerクラスで指定されたIDの書籍のHTTPリクエストとHTTP要求の書籍のリストに応答して、それぞれ2つのメソッドを提供します。モノやフラックス及びその他の目的ますのでご注意ください。これらのオブジェクトは、データストリームの責任を処理スキームフロー仕様反応式Publisherのインタフェースタイプ、達成されます。唯一つの元素を含有する流れを処理するオブジェクト、フラックスは、N個の要素を含むストリームを表すモノ。

@RestController 
パブリッククラスBookController {//反应式控制器
@GetMapping( "/書籍")
フラックス<ブック>リスト(){
returnthis.repository.findAll();
}
@GetMapping( "/書籍/ {ID}")
モノ<ブック> findById(@PathVariable文字列ID){
returnthis.repository.findOne(ID)。
}
}

これらは、春のWebプログラミングのためのノートです、私たちは同じ問題を解決するには、以下の機能のWebフレームワークを使用しています。

関数型プログラミング

委譲のスプリング機能方法サーバは、要求のインスタンスを受信し、式のタイプに応答を返す処理機能への要求。コードの一部の図で、クラスBookHandler請求listBooks()とgetBook()メソッドを作成するには、コントローラの機能と同等です。

publicclassBookHandler { 
公共モノ<ServerResponse> listBooks(ServerRequest要求){
戻りServerResponse.ok()
.contentType(APPLICATION_JSON)
.body(repository.allPeople()、Book.class)。
}
公共モノ<ServerResponse> getBook(ServerRequestリクエスト){
戻りrepository.getBook(request.pathVariable( "ID"))
.then(書籍- > ServerResponse.ok()
.contentType(APPLICATION_JSON)
.body(fromObject(書籍)) )
.otherwiseIfEmpty(ServerResponse.notFound()()を構築します)。
}
}

HTTP要求タイプのメディアパラメータを一致させる機能をルーティングすることにより、クライアントの要求はハンドラにルーティングされます。次のコードは、ライブラリリソースのエンドポイントURIの代表者に適切なハンドラへの呼び出しを示しています。

BookHandlerハンドラ=新しいBookHandler(); 
RouterFunction <ServerResponse> personRoute =
ルート(
GET( "/書籍/ {ID}")
.AND(受け入れる(APPLICATION_JSON))、ハンドラ:: getBook)
.andRoute(
"/書籍を")を取得
.AND(受け入れる(APPLICATION_JSON) )、ハンドラ:: listBooks)。

これらの例の後ろに格納されたデータはまた、達成するために春データ反応のCouchbase、反応性のMongoDBとカサンドラによってサポートされている完全な反応性体験をサポートしています。

RESTエンドポイントを用いた反応は、プログラミングを行います

伝統的な春のWeb MVCモデルから新しいプログラミングモデルは、いくつかの素晴らしい新機能を導入しました。

例えば、WebFluxモジュールは完全RestTemplate、Webクライアントと呼ばれる別の反応スキームを非ブロッキングで提供されます。以下のWebクライアントを作成し、コールブックは、指定されたIDに1234冊の本を要求するエンドポイント。

//通过Webクライアント调用REST端点
モノ<予約>本= WebClient.create( "HTTP:// localhostを:8080")
に.get()
た.url( "/書籍/ {ID}" 1234)
.accept(APPLICATION_JSON)
.exchange(リクエスト)
.then(応答- > response.bodyToMono(Book.class))。

HTTP / 2をサポート

HTTP / 2豊かなWeb体験を提供し、伝送性能、減少レイテンシとスループットの向上アプリケーションを向上させます。

春5は、特殊なHTTP / 2機能のサポートを提供し、また、JDK 9新しいHTTPクライアントで発生すると予想される人々をサポートしています。HTTP / 2サーバープッシュ機能は、Spring開発者にServerPushFilterクラス桟橋サーブレットエンジンによって長時間開示されていますが、箱から出して春5で見つけた場合は、HTTP / 2性能向上、しなければならない人たちのウェブ最適化を提供してきたが私たちは、この目的のために応援されます。

春5.1は、Servlet 4.0、HTTP / 2の新機能は、Tomcatの9.0、Jetty9.3アンダートウ1.4とネイティブが提供されます提供します。

Kotlinと春WebFlux

KotlinはJetBrainsのサポート関数型プログラミングからオブジェクト指向言語です。その主な利点の1つは、非常に高いとJavaの相互運用性です。Kotlinのための特別なサポートの導入により、春5は完全にこの利点を吸収します。その機能のプログラミングスタイルと春WebFluxモジュールは完全にWebフレームワークときれいで、慣用的なコードのその新しいルーティングDSLの機能の使用に一致します。そのような、単に、次のコードをルーティングするエンドポイントとして表すことができます。

// Kotlin用于定义端点的路由DSL 
@Beanの
楽しいapiRouter()=ルータ{
()(APPLICATION_JSONを受け入れ、 "/api").nest {
"/book".nest {
GET("/"、bookHandler :: findAllの)
( "/ {ID}"、bookHandler :: findOne)GET
}
"/video".nest {
GET(" /」、videoHandler ::のfindAll)
"/ {ジャンル(GET"}、videoHandler :: findByGenre)
}
}
}

上記Kotlin 1.1.4を使用する場合は、Kotlin不変クラスのサポート(デフォルト値を持つオプションのパラメータを介して)、およびヌルのフルサポートのためのAPIのサポートを追加します。

ラムダ式は、豆を使用しサイン

あなたは今、春の豆登録ラムダ式を使用することができ、伝統的なXMLとJavaConfigする代わりに、Beanが実際にプロバイダとして登録することができます。ラムダ式を使用して、次のコードは、ブックビーンを登録しました:

GenericApplicationContextコンテキスト= newGenericApplicationContext()。
context.registerBean(Book.class、() - >新しい
ブック(context.getBean(Author.class))
);

春のWeb MVCは、最新のAPIをサポート

新しいWebFluxモジュールは、多くの新しいエキサイティングな機能を提供していますが、また、Spring MVCの開発者のニーズを継続して使用するために喜んで春5に応えます。春5更新「モデル - ビュー - コントローラ」の枠組みはWebFlux、ジャクソン2.9といるProtobuf 3.0の最新バージョンと互換性があり、さらには新しいJava EE 8 JSON-バインディングAPIのサポートが含まれています。

実施基本的なサーバHTTP / 2の特徴に加えて、春のWeb MVC PushBuilderサーブレット4.0は、パラメータコントローラMVC方式でサポートされています。最後に、ウェブMVCが完全に炉フラックスオブジェクトとモノ3.1、ならびにRxJava 1.3とRxJava 2.1をサポートし、それらは、MVCコントローラメソッドの戻り値として扱われます。究極の目的は、Springのデータは、新しいWebクライアントに反応し、反応性のリポジトリをサポートするサポートすることです。

JUnitの5つの同時実行と試験条件を使用して

春5と1のJUnit

機能的なパラダイムのSpring5フル受け入れ、そしてJUnit5とその新しいスタイル機能テストをサポートしています。また、それは古いコードを破壊しないことを確実にするためのJUnit 4との下位互換性を提供します。

Spring5のテストスイートは、いくつかの方法で強化されていますが、最も明白には、そのJUnitの5のサポートです。今関数型プログラミング特性のJava 8は、テストユニットに設けられたことができます。次のコードは、このサポートを示しています。

@Test 
ボイドgivenStreamOfInts_SumShouldBeMoreThanFive(){
いるassertTrue(Stream.of(20、40、50)
.stream()
.mapToInt(I - > I)
.SUM()> 110、() - > "合計は100以上でなければなりません" );
}

2. JUnitの5への移行

あなたは傍観にアップグレードする5をJUnitの場合は、2部構成のチュートリアルスティーヴ・ペリーの詳細な分析をしようとするあなたを説得します。

Spring5は春TestContextフレームワークで複数の拡張子のAPIのJUnitの5を実装するための柔軟性を継承しました。例えば、開発者は自動的@DisabledIf SPEL(スプリング表現言語)式を計算し、適切にテストを有効または無効に@EnabledIf JUnitの5テストの実行条件と注釈を使用することができます。これらのアノテーションを使用すると、春5のサポート、複雑な条件テストプログラム以前に困難達成します。SpringTextContext Frameworkは、今、同時にテストを実行することができます。

3.春WebFluxは、統合テストを実行します

春のテストは今、春WebFluxサーバの統合テストを実行するためにエンドポイントをサポートしていWebTestClientが含まれています。WebTestClientアナログ要求と応答は、サーバリソースの枯渇を避けるために、インフラのWebFluxサーバーに直接結合することができます。

WebTestClientは、コントローラの実サーバ、または機能または使用にバインドすることができます。次のコードでは、WebTestClientは、ローカルホストにバインドされます。

WebTestClient testClient = WebTestClient 
.bindToServer()
.baseUrl( "のhttp:// localhostを:8080")
.build();

次のコードは、WebTestClient RouterFunctionにバインドします。

RouterFunction bookRouter = RouterFunctions.route(
RequestPredicates.GET( "/ブック")、
要求- > ServerResponse.ok()(ビルド)。
);
WebTestClient
.bindToRouterFunction(bookRouter)
.build()get()は、URI( "/ブック")。。
.exchange()
.expectStatus()ISOK()。
.expectBody()のisEmpty();

パックと捨てられたクリーンアップ

Spring5は、一部の旧式のAPIのサポートを終了します。同じ運命3を休止し、放棄された休止5を支持するために、4を休止有します。また、ポートレット、ベロシティ、JasperReportsの、XMLBeansでは、JDOとグァバサポートも終了しました。

パッケージレベルでのクリーンアップ作業が続きます。スプリング5は、もはやまたはweb.view.tiles2M(バネ側面モジュールから)beans.factory.access、jdbc.support.nativejdbc、mock.staticmockサポートされていません。タイル3は現在、春の最小要件です。

春のコアの一般的な更新とコンテナ

スプリング5と認識成分を走査するための改良された方法は、大規模プロジェクトの性能を高めることができます。現時点では、走査は、コンパイル時に行われるが、インデックスファイルMETA-INF / spring.componentsファイルにコンポーネントの座標を追加しました。インデックスは、プロジェクトのアプリケーション固有のプラットフォーム用に定義されたビルドタスクによって生成されます。

javaxパッケージから注釈付き標識された成分がインデックスに追加され、クラスまたはインタフェースで注釈任意@Indexがインデックスに追加されます。従来型のばね走査パスが削除されず、フォールバックオプションとして保持されます。起動時間を短縮します多くのサーバの春のプロジェクトをホスティングしている大規模なコードベースのための多くの異なるパフォーマンス上の利点があります。

スプリング5はまた、必要に応じて注入点を示すために使用されてもよい@Nullableのサポートを追加します。ユーザーは、NULL値を受け入れるように準備しなければなりません。また、注釈はまた、このパラメータがnullの場合もマークフィールド、および値を返すために使用することができます。等@NullableのIntelliJ IDEA主IDEのためだけでなく、使用することができ、FindBugsのエクリプス、コンパイル時の処理でヌル値は、実行時にNullPointerExceptionsがを送信することなく、容易になるようにします。

春のログもパフォーマンスが向上し、Commonsのロギングブリッジは箱から出てきます。今、リソースの抽象化守備のプログラミングでサポートされている、ISFILEインジケータを提供することはgetFileアクセスです。

私は春5を参照するにはどうすればよいです

春は春の主要な保護に基づいてシームレスな、迅速なサービスを提供して拡張子の略新しい5反応性プログラミングモデルの最も重要な特性です。春5人の採用により、将来的には反応性のJava Webを使用したプログラミング言語およびエンタープライズアプリケーション開発となることが期待されます。

春の未来はSpringSecurity、春データと春の統合は、反応性プログラミング機能と利点を採用することが期待されているので、このコミットメントを反映していきます。

要するに、ばね5は、豪華な春の開発が大幅に歓迎シフトを表すだけでなく、他のフレームワークの開発に向かってパスを指摘しました。春はまた、5春ブーツ、春の雲は非常に豊富な経験を提供するアップグレードされ、春にはすでに、それはプログラミングエコロジーとなっているだけのフレームワークではありません。

おすすめ

転載: www.cnblogs.com/hulianwangjiagoushi/p/11419632.html