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 つのアノテーションをコンテナにパッケージ化する役割を果たします。注釈を付けるための反復可能なアノテーション、または反復アノテーション タイプ シリーズ
属性を使用してアノテーションを作成します。
ステップ 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 サイトの他の関連記事を参照してください。

javaispopularforsoss-platformdesktopapplicationsduetoits "writeonce、runaynay" philosophy.1)itusesbytecodatiTatrunnanyjvm-adipplatform.2)ライブラリリケンディンガンドジャヴァフククレアティック - ルルクリス

Javaでプラットフォーム固有のコードを作成する理由には、特定のオペレーティングシステム機能へのアクセス、特定のハードウェアとの対話、パフォーマンスの最適化が含まれます。 1)JNAまたはJNIを使用して、Windowsレジストリにアクセスします。 2)JNIを介してLinux固有のハードウェアドライバーと対話します。 3)金属を使用して、JNIを介してMacOSのゲームパフォーマンスを最適化します。それにもかかわらず、プラットフォーム固有のコードを書くことは、コードの移植性に影響を与え、複雑さを高め、パフォーマンスのオーバーヘッドとセキュリティのリスクをもたらす可能性があります。

Javaは、クラウドネイティブアプリケーション、マルチプラットフォームの展開、および言語間の相互運用性を通じて、プラットフォームの独立性をさらに強化します。 1)クラウドネイティブアプリケーションは、GraalvmとQuarkusを使用してスタートアップ速度を向上させます。 2)Javaは、埋め込みデバイス、モバイルデバイス、量子コンピューターに拡張されます。 3)Graalvmを通じて、JavaはPythonやJavaScriptなどの言語とシームレスに統合して、言語間の相互運用性を高めます。

Javaの強力なタイプ化されたシステムは、タイプの安全性、統一タイプの変換、多型を通じてプラットフォームの独立性を保証します。 1)タイプの安全性は、コンパイル時間でタイプチェックを実行して、ランタイムエラーを回避します。 2)統一された型変換ルールは、すべてのプラットフォームで一貫しています。 3)多型とインターフェイスメカニズムにより、コードはさまざまなプラットフォームで一貫して動作します。

JNIはJavaのプラットフォームの独立を破壊します。 1)JNIは特定のプラットフォームにローカルライブラリを必要とします。2)ローカルコードをターゲットプラットフォームにコンパイルおよびリンクする必要があります。3)異なるバージョンのオペレーティングシステムまたはJVMは、異なるローカルライブラリバージョンを必要とする場合があります。

新しいテクノロジーは、両方の脅威をもたらし、Javaのプラットフォームの独立性を高めます。 1)Dockerなどのクラウドコンピューティングとコンテナ化テクノロジーは、Javaのプラットフォームの独立性を強化しますが、さまざまなクラウド環境に適応するために最適化する必要があります。 2)WebAssemblyは、Graalvmを介してJavaコードをコンパイルし、プラットフォームの独立性を拡張しますが、パフォーマンスのために他の言語と競合する必要があります。

JVMの実装が異なると、プラットフォームの独立性が得られますが、パフォーマンスはわずかに異なります。 1。OracleHotspotとOpenJDKJVMは、プラットフォームの独立性で同様に機能しますが、OpenJDKは追加の構成が必要になる場合があります。 2。IBMJ9JVMは、特定のオペレーティングシステムで最適化を実行します。 3. Graalvmは複数の言語をサポートし、追加の構成が必要です。 4。AzulzingJVMには、特定のプラットフォーム調整が必要です。

プラットフォームの独立性により、開発コストが削減され、複数のオペレーティングシステムで同じコードセットを実行することで開発時間を短縮します。具体的には、次のように表示されます。1。開発時間を短縮すると、1セットのコードのみが必要です。 2。メンテナンスコストを削減し、テストプロセスを統合します。 3.展開プロセスを簡素化するための迅速な反復とチームコラボレーション。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック









