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:
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.
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.
Beispiel einer funktionalen Schnittstelle des Spring-Frameworks:
@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.
Funktionsdeskriptor
Der Funktionsdeskriptor einer Schnittstelle ist eine Abstraktion der Schnittstelle Der Typ der Methode. Der Methodentyp umfasst Parametertypen, Rückgabetyp und Throw-Klausel.
Beispiel:
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:
// Verwenden des Lambda-Ausdrucks
Beispiel 2:
//Verwenden Sie den Lambda-Ausdruck
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
Wir können auch Jahr, Monat und eingeben day Parameter zum Erstellen einer neuen LocalDate-Instanz.
// 1. April 2016
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
// 18:30:30
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)
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
// 01.04.2016 13:30
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
// Die aktuelle Zeit verwendet die Systemuhr in einer bestimmten Zeitzone
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.
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:
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:
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:
Schritt 2 Schritt: Deklarieren Sie den Containeranmerkungstyp.
Die gesamte Implementierung ist wie folgt:
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!