Heim  >  Artikel  >  Java  >  Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

黄舟
黄舟Original
2017-03-21 10:48:171465Durchsuche

Spring Framework 4 unterstützt die Java 8-Sprache und die API-Funktionalität. In diesem Artikel konzentrieren wir uns auf die Unterstützung der neuen Java 8-Funktionen durch Spring 4. Die wichtigsten sind LambdaAusdruck, MethodeReferenz, JSR-310-Datum und -Uhrzeit sowie wiederholbare Anmerkungen. Werfen wir einen Blick mit dem Editor unten

Spring Framework 4 unterstützt die Sprache und API-Funktionen von Java 8. In diesem Artikel konzentrieren wir uns auf die Unterstützung der neuen Java 8-Funktionen durch Spring 4. Die wichtigsten sind Lambda-Ausdrücke, Methodenreferenzen, JSR-310-Datum und -Uhrzeit sowie wiederholbare Anmerkungen.

Lambda-Ausdrücke

Die Codebasis von Spring verwendet eine große Anzahl funktionaler Schnittstellen in Java 8, und Lambda-Ausdrücke können verwendet werden, um saubereren und kompakteren Code zu schreiben. Wir können einen Lambda-Ausdruck immer dann bereitstellen, wenn ein Objekt einer funktionalen Schnittstelle erwartet wird. Lassen Sie uns zunächst etwas über funktionale Schnittstellen lernen, bevor wir fortfahren.

Funktionale Schnittstelle

Eine Schnittstelle mit einer einzelnen abstrakten Methode wird als funktionale Schnittstelle bezeichnet. Hier sind einige Beispiele für funktionale Schnittstellen im JDK:

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Komparator ist nur eine Abstraktion von Funktionen von Nicht-Objekt-Methoden. Obwohl zwei abstrakte Methoden deklariert sind, wird equal von der Zählung ausgeschlossen, da es sich um eine öffentliche Methode handelt, die dem Objekt entspricht. Eine Schnittstelle, die über eine Objektklassenmethode und keine Nichtobjektmethoden verfügt, ist keine funktionale Schnittstelle.

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Eine Schnittstelle wird als funktionale Schnittstelle bezeichnet, wenn sie über eine abstrakte Nicht-Objekt-Klassenmethode verfügt und von einer nicht-funktionalen Schnittstelle mit einer eindeutigen Objekt-Klassenmethode erweitert wird.

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Beispiel einer funktionalen Schnittstelle des Spring-Frameworks:

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

@FunctionalInterface Annotations kann in der Top-Deklaration der Schnittstellendeklaration verwendet werden, ist aber nicht erforderlich. Diese Annotation wird vom Compiler verwendet, um zu erkennen, ob die Schnittstelle eine gültige funktionale Schnittstelle ist. Wenn wir versuchen, mehrere einzelne abstrakte Methoden in einer Schnittstelle zu definieren, gibt der Compiler einen Fehler aus.

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Funktionsdeskriptor

Der Funktionsdeskriptor einer Schnittstelle ist eine Abstraktion der Schnittstelle Der Typ der Methode. Der Methodentyp umfasst Parametertypen, Rückgabetyp und Throw-Klausel.

Beispiel:

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

So schreiben Sie einen Lambda-Ausdruck

Die Syntax des Lambda-Ausdrucks kann in drei Teile unterteilt werden Teil:

  • Ein Pfeil (–>)

  • Parameterliste: Ein Lambda-Ausdruck kann 0 oder mehr Parameter enthalten. Beispiel:

  • () → { 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); }
  • Ausdruckskörper: kann ein einzelner Ausdruck oder ein Codeblock sein. Ein einzelner Ausdruck wird einfach ausgewertet und zurückgegeben. Beispiel: (String arg) → { System.out.println(“ One argument : ”+arg); } Wenn im Ausdruckskörper (Body) ein Anweisungsblock vorhanden ist, wird dieser als Methodenkörper bestimmt und danach Der Block wird ausgeführt. Eine versteckte Return-Anweisung gibt dem Aufrufer die Kontrolle.

Jetzt werfen wir einen Blick auf die Verwendung von Lambda-Ausdrücken:

Beispiel 1:

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

// Verwenden des Lambda-Ausdrucks

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Beispiel 2:

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

//Verwenden Sie den Lambda-Ausdruck

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Sie können Lambda-Ausdrücke über die Rückruffunktionen von Spring verwenden. Beispielsweise kann die Verwendung eines ConnectionCallbacks zum Abrufen der Liste bestimmter JDBC-Verbindungen wie folgt geschrieben werden: jdbcTemplate.execute(connection -> Connection.getCatalog())

Methodenreferenz

Funktionale Schnittstellen können auch mithilfe von Methodenreferenzen implementiert werden, die auf Methoden oder Konstruktoren verweisen, diese aber nicht aufrufen. Methodenreferenzen ähneln Lambda-Ausdrücken, Methodenreferenzen verweisen jedoch auf Methoden einer vorhandenen Klasse, während Lambdas eine anonyme Methode als Instanz einer funktionalen Schnittstelle definieren.

In Java 8 enthält ein neues Paket eine funktionale Schnittstelle, die häufig für Lambda-Ausdrücke und Methodenreferenzen verwendet wird: java.util.function.

Date Time API

Es gibt mehrere Probleme mit den vorhandenen Date- und Time-Klassen in Java. Eines der größten Probleme mit den Klassen Date und Calendar besteht darin, dass sie nicht threadsicher sind. Entwickler müssen beim Schreiben von Code zur Datumsverarbeitung besonders auf Parallelitätsprobleme achten. Die Date-Klasse unterstützt auch keine Internationalisierung und daher keine Zeitzonen. Entwickler müssen viel Code schreiben, um verschiedene Zeitzonen zu unterstützen.

Datums- und Uhrzeitklassen weisen ebenfalls ein schlechtes API-Design auf. Der Monat in java.util.Date beginnt bei 0, der Tag beginnt bei 1 und das Jahr beginnt bei 1900. Es fehlt an Konsistenz. Diese und mehrere andere Probleme mit den Datums- und Uhrzeitklassen werden jetzt in den neuen Datums- und Uhrzeit-APIs in Java 8 behoben.

Die wichtigen Klassen der neuen Datums- und Uhrzeit-API im java.time-Paket sind LocalDate, LocalTime und ZonedDateTime.

LocalDate und LocalTime

Das Standardformat von LocalDate bei der Darstellung des Datums ist JJJJ-MM-TT, und es gibt keine Zeit. Dies ist eine unveränderliche Klasse. Wir können das aktuelle Datum mit der Methode now() ermitteln.

Beispiel für die Erstellung einer neuen LocalDate-Instanz:

//Erhalten Sie das aktuelle Datum

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Wir können auch Jahr, Monat und eingeben day Parameter zum Erstellen einer neuen LocalDate-Instanz.

// 1. April 2016

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

LocalTime stellt eine datumslose Zeit dar und bleibt unverändert. Das Standardformat für die Zeit ist hh:mm:ss.zzz.

Beispiel für die Erstellung einer neuen LocalTime-Instanz:

//Erhalten Sie die aktuelle Zeit

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

// 18:30:30

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Standardmäßig verwenden die Klassen LocalDate und LocalTime die Systemuhr in der Standardzeitzone. Diese Klassen bieten auch Unterstützung für das Ändern von Zeitzonen über die Methode overloaded new(). Sie können ein Datum in einer bestimmten Zeitzone erhalten, indem Sie Zoneid übergeben.

Beispiel:

// Aktuelles lokales Datum in Kalkutta (Indien)

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Außerdem gibt es eine Klasse, LocalDateTime, die Datum kombiniert und Uhrzeit, das Standardformat ist jjjj-MM-ttTHH:MM:ss.zzz·.

//Aktuelles Datum und Uhrzeit

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

// 01.04.2016 13:30

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

ZonedDateTime

Dies ist eine unveränderliche Klasse, die zur Darstellung eines Datums und einer Uhrzeit einschließlich Zeitzoneninformationen verwendet wird. Wir können eine Instanz dieser Klasse verwenden, um ein bestimmtes Ereignis darzustellen, beispielsweise eine Konferenz in einem Teil der Welt.

// Die aktuelle Zeit verwendet die Systemzeit und die Standardzone

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

// Die aktuelle Zeit verwendet die Systemuhr in einer bestimmten Zeitzone

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Spring 4 bietet ein Transformationsframework, das alle Klassen unterstützt, die Teil der Java 8-API für Datum und Uhrzeit sind. Spring 4 kann einen 2016-9-10 String nehmen und ihn in eine Instanz von Java 8 LocalDate konvertieren. Spring 4 unterstützt auch die Formatierung von Java 8-Datums-/Uhrzeitfeldern über die Annotation @DateTimeFormat. @DateTimeFormat deklariert, dass ein Feld als Datum und Uhrzeit formatiert werden soll.

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Doppelte Annotationen

Vor Java 8 war das Hinzufügen mehrerer Annotationen desselben Typs zu einer Deklaration oder einem Typ (z. B. einer Klasse oder... Methode) ist nicht zulässig. Um dieses Problem zu umgehen, mussten Entwickler sie in einer einzigen Containeranmerkung zusammenfassen.

Beispiel:

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Doppelte Annotationen ermöglichen es uns, denselben Code neu zu schreiben, ohne explizit Containerannotationen zu verwenden. Obwohl die Container-Annotation hier nicht verwendet wird, ist der Java-Compiler dafür verantwortlich, die beiden Annotationen in einen Container zu packen:

Beispiel:

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Definieren Sie sich wiederholende Annotationen

Definieren Sie eine sich wiederholende Annotation, kommentieren Sie sie mit der wiederverwendbaren @Repeatable-Annotation oder erstellen Sie eine Annotation mit dem Attribut „Repeatable Annotation Type Series“ .

Schritt 1: Deklarieren Sie den wiederkehrenden Anmerkungstyp:

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Schritt 2 Schritt: Deklarieren Sie den Containeranmerkungstyp.

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Die gesamte Implementierung ist wie folgt:

Detaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild)

Um Anmerkungen zur Laufzeit zu erhalten Zur Information versehen Sie es einfach mit @Retention(RetentionPolicy.RUNTIME).

Annotationen abrufen

getAnnotationsByType() oder getDeclaredAnnotationsByType() sind neue Methoden in der Reflection-API für den Zugriff auf Anmerkungen.

Annotationen können auch über ihre Containerannotationen mit getAnnotation() oder getDeclaredAnnotation() aufgerufen werden.

Fazit

Spring 4 läuft auch auf Java 6 und Java 7. Da Spring viele funktionale Schnittstellen verwendet, können Sie mit Java 8 und Spring 4 Lambda-Ausdrücke und funktionale Schnittstellen verwenden und saubereren, kompakteren Code schreiben.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die von Spring 4 unterstützten Java8-Funktionen (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn