Heim Java javaLernprogramm 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)

Mar 21, 2017 am 10:48 AM
java8

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); }
    Nach dem Login kopieren
  • 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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie berechnet man das Datum vor einem Jahr oder einem Jahr später in Java 8? Wie berechnet man das Datum vor einem Jahr oder einem Jahr später in Java 8? Apr 26, 2023 am 09:22 AM

Java8 berechnet das Datum vor einem Jahr oder ein Jahr später mithilfe der minus()-Methode, um das Datum vor einem Jahr zu berechnen packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDate previousYear=today.minus(1,ChronoUni

Wie berechnet man das Datum eine Woche später mit Java 8? Wie berechnet man das Datum eine Woche später mit Java 8? Apr 21, 2023 pm 11:01 PM

So berechnen Sie das Datum eine Woche später in Java8. In diesem Beispiel wird das Datum eine Woche später berechnet. Das LocalDate-Datum enthält keine Zeitinformationen. Seine plus()-Methode wird zum Hinzufügen von Tagen, Wochen und Monaten verwendet. Die ChronoUnit-Klasse deklariert diese Zeiteinheiten. Da LocalDate ebenfalls ein unveränderlicher Typ ist, müssen Sie Variablen verwenden, um nach der Rückgabe Werte zuzuweisen. packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[

So verwenden Sie die Clock-Klasse in Java8 So verwenden Sie die Clock-Klasse in Java8 Apr 25, 2023 pm 03:37 PM

Die Clock-Klasse von Java8 Java8 fügt eine Clock-Klasse zum Abrufen des aktuellen Zeitstempels oder von Datums- und Uhrzeitinformationen in der aktuellen Zeitzone hinzu. Wo zuvor System.currentTimeInMillis() und TimeZone.getDefault() verwendet wurden, können sie durch Clock ersetzt werden. packagecom.shxt.demo02;importjava.time.Clock;publicclassDemo10{publicstaticvoidmain(String[]args){//Gibt die aktuelle Zeitbasis zurück

So erhalten Sie den aktuellen Zeitstempel in Java8 So erhalten Sie den aktuellen Zeitstempel in Java8 May 01, 2023 am 11:46 AM

Rufen Sie den aktuellen Zeitstempel in Java8 ab. Die Instant-Klasse verfügt über eine statische Factory-Methode now(), die den aktuellen Zeitstempel zurückgibt, wie unten gezeigt: packagecom.shxt.demo02;importjava.time.Instant;publicclassDemo16{publicstaticvoidmain(String[]args) {Instanttimestamp=Instant.now();System.out.println("Whatisvalueofthisinstant"+timestamp.t

Umgang mit Zeitzonen in Java8 Umgang mit Zeitzonen in Java8 Apr 27, 2023 pm 09:22 PM

Umgang mit Zeitzonen in Java 8 Java 8 trennt nicht nur Datum und Uhrzeit, sondern auch Zeitzonen. Es gibt jetzt eine Reihe separater Klassen wie ZoneId zur Verarbeitung bestimmter Zeitzonen und ZoneDateTime zur Darstellung der Zeit in einer bestimmten Zeitzone. Dies wurde von der GregorianCalendar-Klasse vor Java8 durchgeführt. Das folgende Beispiel zeigt, wie die Zeit in dieser Zeitzone in die Zeit in einer anderen Zeitzone konvertiert wird. packagecom.shxt.demo02;importjava.time.LocalDateTime;importjava.time.ZoneId;importjava.time.ZonedDateT

So verwenden Sie vordefinierte Formatierungstools zum Analysieren oder Formatieren von Datumsangaben in Java8 So verwenden Sie vordefinierte Formatierungstools zum Analysieren oder Formatieren von Datumsangaben in Java8 Apr 28, 2023 pm 07:40 PM

So verwenden Sie vordefinierte Formatierungstools in Java8, um Datumsangaben zu analysieren oder zu formatieren packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;publicclassDemo17{publicstaticvoidmain(String[]args){StringdayAfterTommorrow="20180205 ";LocalDateformatted =LocalDate.parse

So erhalten Sie das heutige Datum in Java8 So erhalten Sie das heutige Datum in Java8 May 01, 2023 pm 06:49 PM

Holen Sie sich das heutige Datum in Java8. LocalDate wird in Java8 verwendet, um das heutige Datum darzustellen. Im Gegensatz zu java.util.Date enthält es nur Datumsangaben und keine Uhrzeit. Verwenden Sie diese Klasse, wenn Sie nur Datumsangaben darstellen müssen. packagecom.shxt.demo02;importjava.time.LocalDate;publicclassDemo01{publicstaticvoidmain(String[]args){LocalDatetoday=LocalDate.now();System.out.println("Heutiges Datum:&q

So ermitteln Sie, ob zwei Datumsangaben in Java8 gleich sind So ermitteln Sie, ob zwei Datumsangaben in Java8 gleich sind May 02, 2023 am 08:46 AM

Bestimmen Sie, ob zwei Datumsangaben in Java8 gleich sind packagecom.shxt.demo02;importjava.time.LocalDate;publicclassDemo04{publicstaticvoidmain(String[]args){LocalDatedate1=LocalDate.now();LocalDatedate2=LocalDate.of(2018,2,5) ;if(date1.equals(date2)){System.out.println("Times are equal");}e

See all articles