Spring Framework 4 は Java 8 言語と API 機能をサポートしています。この記事では、Spring 4 の新しい Java 8 機能のサポートに焦点を当てます。最も重要なものは、ラムダ 式、メソッド 参照 、JSR-310 の日付と時刻、および反復可能なアノテーションです。以下のエディターで見てみましょう
Spring Framework 4 は Java 8 言語と API 関数をサポートしています。この記事では、Spring 4 の新しい Java 8 機能のサポートに焦点を当てます。最も重要なものは、ラムダ式、メソッド参照、JSR-310 の日付と時刻、反復可能なアノテーションです。
ラムダ式
Spring のコード ベースでは、Java 8 の多数の関数インターフェイスが使用されています。ラムダ式を使用すると、よりクリーンでコンパクトなコードを作成できます。関数型インターフェイスの オブジェクト が予期されるときはいつでも、ラムダ式を提供できます。次に進む前に、まず関数インターフェイスについて学びましょう。
関数型インターフェース
単一の抽象メソッドを持つインターフェースは関数型インターフェースと呼ばれます。 JDK の関数インターフェイスの例をいくつか示します。
Comparator は、抽象非オブジェクト メソッドを 1 つだけ持つ関数です。 2 つの抽象メソッドが宣言されていますが、equals はオブジェクトに対応するパブリック メソッドであるためカウントから除外されます。オブジェクト クラス メソッドが 1 つあり、非オブジェクト メソッドが存在しないインターフェイスは、機能インターフェイスではありません。
インターフェイスが抽象的な非オブジェクト クラス メソッドを持ち、独自のオブジェクト クラス メソッドを持つ非関数型インターフェイスから拡張されている場合、そのインターフェイスは関数型インターフェイスと呼ばれます。
Spring Framework の関数型インターフェイスの例:
@FunctionalInterface アノテーションはインターフェイス宣言の先頭の宣言で使用できますが、必須ではありません。このアノテーションは、インターフェースが有効な関数インターフェースであるかどうかを検出するためにコンパイラーによって使用されます。インターフェイス内で複数の単一抽象メソッドを定義しようとすると、コンパイラはエラーをスローします。
関数記述子
インターフェースの関数記述子は、インターフェースの抽象メソッドのメソッドの型です。メソッドのタイプには、パラメータのタイプ、戻り値のタイプ、および throws 句が含まれます。
例:
ラムダ式の書き方
ラムダ式の構文は 3 つの部分に分割できます:
矢印 (–>)
パラメータリスト: a Lambda 式には 0 個以上のパラメータを含めることができます。 例:
() → { System.out.println(“ No arguments”); } (String arg) → { System.out.println(“ One argument : ”+arg); } (String arg1, Integer arg2) → { System.out.println(“Two arguments : ”+arg1+” and ”+arg2); }
式本体: 単一の式またはコード ブロックにすることができます。単一の式が単純に評価されて返されます。 例: (String arg) → { System.out.println(“ 1 つの引数 : ”+arg) } 式本体(Body)内にステートメントブロックがある場合はメソッド本体と判断され、以降ブロックが実行されます。 隠された return ステートメントにより、呼び出し元に制御が与えられます。
次に、ラムダ式の使用方法を見てみましょう:
例 1:
// ラムダ式の使用
例 2:
//ラムダ式
Spring のコールバック関数を通じて Lambda 式を使用できます。たとえば、ConnectionCallback を使用して特定の JDBC 接続のリストを取得する場合は、次のステートメントのように記述できます: jdbcTemplate.execute(connection -> connection.getCatalog())
メソッド リファレンス
関数インターフェースはメソッド参照を使用して実装することもできます。メソッド参照はメソッドまたはコンストラクターを参照しますが、それらを呼び出すことはありません。メソッド参照はラムダ式に似ていますが、メソッド参照は既存のクラスのメソッドを参照するのに対し、ラムダは匿名メソッドを関数インターフェイスのインスタンスとして定義します。
Java 8 では、新しいパッケージに、ラムダ式とメソッド参照によく使用される関数インターフェイス (java.util.function) が含まれています。
Date Time API
Java の既存の Date and Time クラスには複数の問題があります。 Date クラスと Calendar クラスの最大の問題の 1 つは、それらがスレッドセーフではないことです。開発者は、日付処理コードを作成するとき、同時実行性の問題に特に注意する必要があります。 Date クラスは国際化もサポートしていないため、タイム ゾーンもサポートしていません。開発者は、さまざまなタイムゾーンをサポートするために大量のコードを作成する必要があります。
Date および Time クラスも API 設計が不十分です。 java.util.Date の月は 0 から始まり、日は 1 から始まり、年は 1900 から始まります。一貫性が欠けています。 Date and Time クラスに関するこれらおよびその他のいくつかの問題は、Java 8 の新しい Date and Time API で解決されています。
java.time パッケージの新しい日付と時刻 API の重要なクラスは、LocalDate、LocalTime、および ZonedDateTime です。
LocalDate と LocalTime
LocalDate の日付を表すときのデフォルトの形式は YYYY-MM-DD で、時間はありません。これは不変クラスです。 now() メソッドを使用して現在の日付を取得できます。
新しい LocalDate インスタンスの作成例:
//現在の日付を取得します
年、月、日のパラメーターを入力して新しい LocalDate インスタンスを作成することもできます。
// April 1, 2016
LocalTime は日付のない時間を表し、変更されません。時刻のデフォルトの形式は hh:mm:ss.zzz です。
新しい LocalTime インスタンスの作成例:
//現在時刻を取得します
// 18:30:30
デフォルトでは、LocalDate クラスと LocalTime クラスはデフォルトでシステム クロックを使用します。タイムゾーン。これらのクラスは、overloaded new() メソッドを介したタイムゾーンの変更のサポートも提供します。 zoneid を渡すことで、特定のタイムゾーンの日付を取得できます。
例:
// コルカタ (インド) の現在の現地日付
さらに、デフォルト形式 yyyy-MM-ddTHH:MM:ss.zzz で日付と時刻を組み合わせるクラス LocalDateTime があります。 ·。
//現在の日付と時刻
// 2016-04-01 13:30
ZonedDateTime
これは、タイムゾーン情報時間を含む日付と時刻を表すために使用される不変クラスです。このクラスのインスタンスを使用して、世界の一部での会議などの特定の イベント を表すことができます。
// 現在の時刻はシステム時刻とデフォルトゾーンを使用します
// 現在の時刻は特定のタイムゾーンのシステムクロックを使用します
Spring 4 は、Java 8 の日付とデフォルトゾーンをサポートする変換フレームワークを提供しますすべてのクラスの時間 API 部分。 Spring 4 は、2016-9-10 の string を受け取り、それを Java 8 LocalDate のインスタンスに変換できます。 Spring 4 では、@DateTimeFormat アノテーションを介した Java 8 日付/時刻フィールドのフォーマットもサポートしています。 @DateTimeFormat は、フィールドを日付時刻としてフォーマットする必要があることを宣言します。
アノテーションの重複
Java 8 より前では、同じタイプの複数のアノテーションを宣言または型 (クラスやメソッドなど) に追加することは許可されませんでした。回避策として、開発者はそれらを 1 つのコンテナ アノテーションに結合する必要がありました。
例:
アノテーションが重複すると、コンテナーアノテーションを明示的に使用せずに同じコードを書き直すことができます。ここではコンテナ アノテーションは使用されていませんが、Java コンパイラは 2 つのアノテーションをコンテナにパッケージ化する役割を果たします。注釈を付けるための反復可能なアノテーション、または反復アノテーション タイプ シリーズ
属性を使用してアノテーションを作成します。
ステップ 1: 繰り返しのアノテーション タイプを宣言します:
ステップ 2: コンテナー アノテーション タイプを宣言します。
実装全体は次のとおりです:
実行時にアノテーション情報を取得するには、 @Retention(RetentionPolicy.RUNTIME) アノテーションを渡すだけです。
注釈の取得getAnnotationsByType() または getDeclaredAnnotationsByType() は、注釈にアクセスするための Reflection API の新しいメソッドです。
アノテーションには、getAnnotation() または getDeclaredAnnotation() を使用してコンテナーアノテーションを通じてアクセスすることもできます。
結論
Spring 4 は Java 6 および Java 7 でも実行されます。 Spring では多くの関数型インターフェイスが使用されるため、Java 8 と Spring 4 では、Lambda 式と関数型インターフェイスを使用して、よりクリーンでコンパクトなコードを作成できるようになります。
以上がSpring 4 でサポートされる Java8 機能の詳細な紹介 (図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。