Vorwort
Ab sofort wurde die JDK -Version auf 10 aktualisiert. Obwohl der Lebenszyklus von Java9 nur ein halbes Jahr beträgt, denke ich, dass die Änderungen, die diese Version vorgenommen haben, unauslöschlich sind. Es ist die erste tiefsitzende Innovation in Architektur und Abhängigkeit. Lassen Sie uns unten mehr erfahren.
Modulare Funktionen haben mehrere Zwecke:
1. Modulare Projektkonstruktion
Tatsächlich ist die Modularisierung selbst nicht schwer zu verstehen. Wir haben Maven oder Gradle verwendet, um Projekte mit zu vielen Modulen zu bauen. Dann können wir immer noch unser modulares Projektprojekt in Java9 erstellen. Wie in der Abbildung gezeigt:
Achten Sie auf die folgenden Punkte:
1. Erstellen Sie bitte eine modulare Beschreibungsdatei namens Modul-info.java unter jedem Modul
2. Konfigurieren Sie die Modulabhängigkeiten in der Idee. Wenn unser Projekt.Portal -Modul vom Student.Service -Modul abhängt, können wir es so festlegen:
Suchen Sie dieses Optionssymbol: und stellen Sie es so fest, dass Abhängigkeiten hinzugefügt werden:
Wenn Sie Abhängigkeiten für andere Projekte festlegen müssen, setzen Sie sie bitte auf diese Weise.
2. Implementierungsschritte
2.1. Student.Service Modul
2.1.1. Schreiben Sie Modul-info.java von studentservice
Beispielcode:
importieren com.bdqn.ryrk.student.service.secondstudentService; import com.bdqn.ryrk.student.service.api.istudentService;/** * modulare Beschreibung Klasse, Unified in der Wurzelverzeichnis der Quelldatei jedes Moduls: modul-info.java * -Syntax-Syntax-Syntax-Syntax-Strukturen in Modula: * .... * * [Open] Modul Modul Name { * erfordert [static | transitiv] Modulname; * Exportiert Paketname [zum Modulnamen] * Provider -Schnittstellenname mit [Schnittstellenimplementierungsklasse, ....] * Verwendet Schnittstellenname * *} ** @Author chen.nie * @date 2018/4/18 **/modul student.service.api; ISTUDENTENTENTEVICE mit SecondstudentService zur Verfügung stellen;}2.1.2. Definieren Sie die Schnittstelle
Paket com.bdqn.lyrk.student.service.api; öffentliche Schnittstelle iStudentService {void Study ();}2.1.3. Implementierungsklassen definieren
Paket com.bdqn.ryrk.student.service; import com.bdqn.ryrk.student.service.api.istudentService; public class SecondstudentService -Geräte implements istudentService {@Override public void study () {System.outln ("zweite Studie"); }}2.2. Projekt.Portal Modul
2.2.1. Schreiben Sie Modul-info.java
importieren com.bdqn.lyrk.student.service.api.istudentService; Module Project.Portal {use iStudentService; erfordert transitive student.service;}2.2.2. Hauptmethode schreiben
Paket com.bdqn.lyrk.portal; import com.bdqn.lrk.student.service.api.istudentService; import Java.util.serviceloader; Public Class -Haupt -Haupt -Haupt -statische VOID -Haupthaupt (] args. studentervices.findfirst (). get (). study (); }}
Nach dem Laufen können wir die entsprechenden Ergebnisse erzielen:
3.. Häufige Konfigurationen von Modul-info.java-Dateien
3.1. Über die offenen Schlüsselwörter
Öffnen: Wenn dieses Schlüsselwort auf das Modul geladen wird, ist die Klassensichtbarkeit unter dem Exportpaket durch Exporte am höchsten. Wir können durch Reflexion Objekte erstellen und auf Eigenschaften zugreifen.
3.2. Über Exporte Keywords
Nachdem wir das Modul definiert haben, können wir angeben, auf welche Pakete unter dem Modul von anderen Modulen zugegriffen werden können, und auf das Schlüsselwort der Exporte spielt diese Rolle. Wir können auch zusammenarbeiten, um anzugeben, auf welche Module auf den Inhalt des Pakets zugreifen können
Syntax -Exportpaketname [to] Modulname
exportiert <pakets>; exportiert <paket> nach <modul1>, <module2> ...;
3.3. Öffnet das Schlüsselwort
Open ist ähnlich wie offen. Wenn dem Modul das offene Schlüsselwort hinzugefügt wird, befinden sich die im Modul standardmäßig exportierten Exportpakete in Form von Öffnen.
Modul n {exportiert com.jdojo.claim.model; öffnet com.jdojo.claim.model;}3.4. Benötigt Keywords
Dieses Schlüsselwort deklariert die Abhängigkeit zwischen dem aktuellen Modul und einem anderen Modul. Ein bisschen ähnlich wie bei den Abhängigkeiten in Maven.
erfordern <modul>; Erfordert transitiv <modul>; Erfordert statische <modul>; erfordert transitive statische <modul>; erfordert transitive statische <modul>;
Statische Modifikatoren können auch zur Erfordernisse der Erforderlichen hinzugefügt werden, was bedeutet, dass die Abhängigkeit zum Kompilierenzeitpunkt obligatorisch ist, jedoch zur Laufzeit optional ist. Der transitive Modifikator in der Erfordernisse wird implizite Abhängigkeiten für andere Module verursachen, die vom aktuellen Modul abhängen. Bitte beachten Sie die folgende Abbildung:
Hier können wir uns die Datei modul-info.class unter dem Modul Java.se ansehen:
/ * * Copyright (C) 2014, Oracle und/oder seine Partner. Alle Rechte vorbehalten. * Oracle Proprietary/Confidential. Die Verwendung unterliegt Lizenzbedingungen. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ** * Definiert die Kern -Java -API. * <p> * Die Module, die die CORBA- und Java-EE-APIs definieren, werden von * dieses Modul nicht benötigt, aber sie werden von * <a href = "java.se.ee-summary.html"> {@code java.se.ee} </a> Modul verlangt. * * <dl> * <dt style = "Schriftfamilie: 'Dejavu Sans', Arial, Helvetica, sans serif"> Optional für die Java-SE-Plattform: </dt> * <dd> * <a href = "../ specs/jni/index.html"> java native untergeface (jni) </aBr> * <Alml "> JAVA Native Interface (jni) </a> <bräuse"> java native interface (jni) </a> <brüble "> java native interface (jni) </a> <brüble"> java native interface (jni) </a> <Br> * <a> <a.html "> href="../specs/jvmti.html">Java Virtual Machine Tool Interface (JVM TI)</a><br> * <a href="../specs/jdwp/jdwp-spec.html">Java Debug Wire Protocol (JDWP)</a><br> * </dd> * </dl> * * @moduleGraph * @Since 9 */Modul Java.se {erfordert transitive java.compiler; erfordert transitive java.datatransfer; erfordert transitive java.desktop; benötigt transitiv Java.instrument; erfordert transitives java.logging; erfordert transitives Java.management; erfordert transitive java.management.rmi; erfordert transitives Java.naming; erfordert transitive java.prefs; erfordert transitive java.rmi; erfordert transitive java.scripting; erfordert transitive java.security.jgss; erfordert transitive java.security.sasl; erfordert transitive java.sql; Erfordert transitive java.sql.rowset; erfordert transitive java.xml; erfordert transitive java.xml.crypto;}Zu diesem Zeitpunkt brauchen wir nur Java.se, und wir werden indirekt alle Abhängigkeiten unter diesem Modul einführen
3.5. Verwendungen und Anbieterschlüsselwörter
Java ermöglicht die Verwendung von Dienstleistermechanismen, die Dienstanbieter und Dienstnutzer trennen. JDK 9 ermöglicht es, seine Dienste mithilfe von Anweisungen und Bereitstellung von Aussagen zu implementieren. Verwenden Sie Anweisungen, um den Namen der Serviceschnittstelle anzugeben. Das aktuelle Modul findet ihn und lädt ihn mit der Klasse java.util.serviceloader. Bitte beachten Sie das vorherige Beispiel für den Code. Hinweis: Die vom Anbieter bereitgestellten Klassen müssen unter demselben Modul stehen, und die Implementierung anderer Module kann derzeit nicht verwiesen werden. Zum Beispiel: Der StudentServiceImPL kann nur unter dem Modul des Students.service existieren, und die Schnittstellenimplementierung des Schülermodulanbieters in anderen Modulen ist nicht zulässig.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.