séquence
Cet article étudie principalement comment construire des exemples de module multi-modules et de services Java9 à Maven
maven
L'ensemble du projet est le même que la structure d'ingénierie multi-module Maven traditionnelle. Un module de Java9 correspond à un module du projet Maven. Voici le fichier POM dans le répertoire racine:
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: ScheMalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion> 4.0.0 </mackversion> <proupId> com.example </proncId> <ArtefactId> Java9-Service-Demo </ Artifactid> <DERVIÈRE> 0.0.1-Snapshot </DERNIERSE> <DOLULES> <DOLULUDE> Consumer-Demo </codule> <Dodule> Service-Sort </dudule> MODULE> <DOLULE> Service-Sort-Merre </ Modules> </ module> <packaging> pom </packaging> <preperties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <! - Laissez Intellij compiler Java9 correctement, sinon il sera toujours modifié pour utiliser 1.5 -> <maven.comPiler.source> 9 </maven..5 -> <maven. <maven.Compiler.target> 9 </maven.compiller.target> </properties> <fuild> <gluginmanagement> </ groups> <lagins> <proupId> org.apache.maven.plugins </proupatid> <aRtifactid> maven-ccompiller-plugin </ artifactive> <version> 3.6.1 </ version> <feclat> 9 </ release> </ Configuration> </Glugins> </ PluginManagement> </ Build> </ Project>
Voici un Maven-Compiler-Plugin Gestiond, et la version est configurée pour être 9.Carage parce que Java9 prend en charge la version multiple, il peut prendre en charge plusieurs versions Java en même temps. Il est compilé en version Java9 ici.
sort de service
Ceci est le module d'interface de service
module Service.sort {exports Service.Sort; Use Service.Sort.SortService;} Ici, l'utilisation SORTSERVICE est déclarée qu'elle doit utiliser ServiceLoader pour charger l'instance de service dans ce module.
Interface publique SortService {public <T étend comparable> List <T> SortList (liste <T> List); public static sortService getProvideriNstancelazy () {stream <provider <sortService>> fournisseurs = ServiceLoader.load (sortService.class) .Stream (); // La méthode du fournisseur n'instanciera pas jusqu'à ce que GET SOTSERVICE Service = Providers.map (Provider :: Get) .Findany () .OrelSe (null); Service de retour; }} Tout en déclarant l'interface, des méthodes statiques sont également ajoutées pour charger les instances de service.
service-sort-sort
maven
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactive> java9-service-demo </ artifactid> <proupId> com.example </ groupid> <version> 0.0.1-snapshot </ version> </parent> <ModelVersion> 4.0.0 </ ModelVersion> <ProupId> com.example </prôdId> <ArtifActid> Service-Sort-Bubble </ Artifactid> <packaging> jar </packaging> <Dendency> <Dependency> <proudId> com.example </preprid> <version> 0.0.1-snapshot </preffe> </dependency> </dpendances> </propject>
Ajoutez des dépendances sur le package API ici
module-info.java
module Service.sort.bubble {require Service.Sort; Fournir service.sort.sortService avec tri.impl.bubble.bubblesort;} Ici, il est indiqué que Bubblesort fournit la mise en œuvre de TORDSERVICE
Bubblesort
La classe publique Bubblesort implémente SortService {public <T étend comparable> list <T> sortList (list <T> list) {System.out.println ("Utiliser Bubblesort"); pour (int exter = 0; exter <list.size () - 1; exter ++) {for (int inner = 0; inner <list.size () - exter-1; inner ++) {if (list.get (inner) .compareto (list.get (inner + 1))> 0) {swap (list, inner); }}} liste de retour; } private <T> void swap (list <T> list, int inner) {t temp = list.get (inner); list.set (inner, list.get (inner + 1)); list.set (inner + 1, temp); }}service de service de service
maven
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactive> java9-service-demo </ artifactid> <proupId> com.example </ groupid> <version> 0.0.1-snapshot </preinte> </parent> <ModelVersion> 4.0.0 </ ModelVersion> <GroupId> com.example </prôdId> <ArtifActid> Service-Sort-Merge </ Artifactid> <packaging> jar </packaging> <Dedency> <Dependency> <proudId> com.example </preptived> <version> 0.0.1-snapshot </preffe> </dependency> </dpendances> </propject>
module-info.java
module Service.sort.merge {require Service.Sort; Fournir service.sort.sortservice avec tri.impl.merge.merghesort;} Voici la mise en œuvre de Mergesort comme interface de trimestre
Fusion
import java.util.list; import java.util.arraylist; import java.util.collections; import java.util.arrays; import service.sort.sortService; public class Mergegesort implémente sortService {public.out.println ("en utilisant MergeSort"); Collection.Sort (liste); Liste de retour; }}Consommateur
maven
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactive> java9-service-demo </ artifactid> <proupId> com.example </ groupid> <version> 0.0.1-snapshot </frisert> </parent> <ModelVersion> 4.0.0 </ ModelVersion> <ProupId> com.example </proupId> <ArtefactId> Consumer-Demo </ artifactid> <packaging> jar </packaging> <peditences> <dependency> <proudId> com.example </preniDID> <ArtifActid> Service-Sort </ ArtId> COMM.Example </proncID> <version> 0.0.1-snapshot </preffe> </dependency> </dpendances> </propject>
Notez qu'il n'y a pas de dépendances pour les classes d'implémentation ajoutées ici
module-info.java
MODULE CONSUMER {Exiger Service.Sort;} Principal
classe publique Main {public static void main (String [] args) {System.out.println ("Tri le consommateur de service démarré."); List <Integer> data = new ArrayList <Neger> (); data.add (5); data.add (3); data.add (10); data.add (2); data.add (8); SortService sortService = triService.getProvideriNstancelazy (); if (triService! = null) {triService.sortList (data); } System.out.println (données); System.out.println ("finition"); }}Compiler et courir
Compilation
MVN Clean Installation
Ceci est exécuté dans le répertoire racine
Utilisation de bulles
La copie de code est la suivante:
java --module-path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-sort-bubble/target/service-sort-bubble-0.0.1-snaps consommateur / consommateur.main
Notez que le pot de bulle en trajet de module est ajouté ici
Sortir
Trier le consommateur de services a commencé.
Utiliser Bubblesort
[2, 3, 5, 8, 10]
finition
Utiliser la fusion
La copie de code est la suivante:
Java --module-path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-snapsho.jar-Meservice-Sort-Merge-0.0.1-snaps consommateur / consommateur.main
Notez que la fusion de bocal sur le chemin de module est ajoutée ici
Sortir
Trier le consommateur de services a commencé.
Utilisation de Mergesort
[2, 3, 5, 8, 10]
finition
Les deux implémentations de service sont ajoutées
La copie de code est la suivante:
java - trame de module ./Consumer-Demo/target/Consumer-Demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-sser Ort-Bubble / Target / Service-Sort-Bubble-0.0.1-Snapshot.jar: ./ Service-Sort-Merge / Target / Service-Sort-Merge-0.0.1-Snapshot.jar - MODULE CONSUMER / CONSUMER.MAIN
ou
La copie de code est la suivante:
java - trame de module ./Consumer-Demo/target/Consumer-Demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-sser Ort-Merge / Target / Service-Sort-Merge-0.0.1-Snapshot.jar: ./ Service-Sort-Bubble / Target / Service-Sort-Bubble-0.0.1-Snapshot.jar - MODULE CONSUMER / CONSUMER.MAIN
Sortir
Trier le consommateur de services a commencé.
Utiliser Bubblesort
[2, 3, 5, 8, 10]
finition
Il semble que cela n'a rien à voir avec l'ordre d'ajouter au chemin. Même si le paquet de pot de fusion est placé devant lui, c'est toujours une bulle.
résumé
Dans Java6, il y avait déjà un service de service, mais à ce moment-là, il était invoqué sur la création d'un fichier de nom de chemin complet pour l'interface de service dans le répertoire Meta-Inf / Services du package JAR, et a écrit le nom de chemin complet de la classe d'implémentation. Après l'introduction de la modularisation, Java9 prend également en charge la déclaration de fournisseur de services et d'informations sur les consommateurs dans module-info.java. De cette façon, le système de modules peut prendre en charge ServiceLoader sans utiliser la méthode de déclaration de méta-infr.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.