urutan
Artikel ini terutama mempelajari cara membangun java9 multi modul dan contoh layanan di Maven
Maven
Seluruh proyek sama dengan struktur rekayasa multi-modul Maven tradisional. Modul di Java9 sesuai dengan modul dalam proyek Maven. Berikut adalah file POM di direktori root:
<? 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 xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ModelVersion> 4.0.0 </ModelVersion> <groupid> com.example </groupcing> 4.0.0 <ArTifactId> java9-service-demo </t Artifactid> <version> 0.0.1-Snapshot </version> <demules> <podule> Konsumen-demo </module> <podule> </module> <Modul> </Modul </Modul> <Modul> Layanan-Sort-Bubble </Modul> </Modul> </Modul </Modul> <Modul> Layanan> Layanan-Sort-BUBBLE </Modul> </Modul> <packaging> pom </packaging> <prop Properties> <proyect.build.sourceencoding> utf-8 </project.build.sourceencoding> <!-Biarkan IntelliJ mengkompilasi java9 dengan benar, jika tidak akan selalu diubah kembali menjadi 1.5-> <maven.compiler.source> 9 </murce> 9 </source> 9 </moven. <maven.compiler.target> 9 </maven.compiler.target> </ Properties> <build> <dluginmanagement> <dlugin> <dlugin> <groupid> org.apache.maven.plugins </groupid> <ArtifacTid> MAVEN-COMPILER-PLUGIN. <raille> 9 </reasur> </configuration> </plugins> </luginmanagement> </build> </poject>
Berikut adalah maven-kompiler-plugin yang dikelola, dan rilis dikonfigurasi menjadi 9. Karena Java9 mendukung rilis multi, dapat mendukung beberapa versi Java pada saat yang sama. Ini dikompilasi sebagai versi java9 di sini.
Layanan-Sort
Ini adalah modul antarmuka layanan
Module Service.sort {Exports Service.sort; menggunakan service.sort.sortService;} Di sini, Use Sortservice dinyatakan bahwa ia perlu menggunakan ServiceLoader untuk memuat instance layanan dalam modul ini.
Public Interface Sortservice {public <t extends CompABLEBED> DAFTAR <T> SORTLIST (Daftar <T> Daftar); public static sortservice getProviderInstanceLazy () {stream <penyedia <srortservice>> penyedia = serviceLoader.load (sortservice.class) .stream (); // Metode penyedia tidak akan instantiate sampai mendapatkan layanan sortservice = providers.map (penyedia :: get) .findany () .orelse (null); layanan pengembalian; }} Saat mendeklarasikan antarmuka, metode statis juga ditambahkan ke instance layanan pemuatan.
Layanan-Sort-Bubble
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 XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <tartif> <Artifactid> Java9-service-demo </Artifaccid <tartif> <Artifactid> Java9 <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>service-sort-bubble</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>service-sort</artifactId> <version> 0.0.1-Snapshot </version> </dependency> </dependencies> </joy Project>
Tambahkan dependensi pada paket API di sini
Modul-Info.java
module service.sort.bubble {membutuhkan service.sort; Berikan service.sort.sortService dengan sort.impl.bubble.bubblesort;} Di sini dinyatakan bahwa Bubblesort menyediakan implementasi jenis layanan
Bubblesort
Public Class Bubblesort mengimplementasikan sortservice {public <t extends CompABLEBATE> Daftar <T> sortList (daftar <T> Daftar) {System.out.println ("Gunakan Bubblesort"); untuk (int outer = 0; luar <list.size ()-1; luar ++) {for (int inner = 0; batner <list.size ()-outer-1; batner ++) {if (list.get (dalam) .compareto (list.get (dalam+1))> 0) {swap, inner); }}} daftar pengembalian; } private <t> void swap (Daftar <T> Daftar, int dalam) {t temp = list.get (dalam); list.set (bagian dalam, list.get (bagian dalam + 1)); list.set (bagian dalam + 1, temp); }}Layanan-Sort-Merge
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 XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <tartif> <Artifactid> Java9-service-demo </Artifaccid <tartif> <Artifactid> Java9 <version> 0.0.1-Snapshot </version> </tarent> <nodelversion> 4.0.0 </ModelVersion> <Groupid> com.example </groupid> <ArTifactId> Layanan-SORT-MERGE </artifactid> <packaging> Jar </packaging> <dependencies> <dependency> <grouptid> <packaging> </packaging> <dependencies> <dependency> <grouptid> <packaging> </packaging> <dependencies> <dendendency> <groupureR> <RUMPICING> <ROMPORT/SIVERIF> <REPENTOR> <REPENDENSI> <RUPREDENCES> <RUPRIPRUPID> COM.ECRAGING> <version> 0.0.1-Snapshot </version> </dependency> </dependencies> </joy Project>
Modul-Info.java
module service.sort.merge {membutuhkan service.sort; Berikan service.sort.sortService dengan sort.impl.merge.mergesort;} Berikut adalah implementasi mergeSort sebagai antarmuka sortservice
MergeSort
Impor java.util.list; impor java.util.arraylist; impor java.util.collections; impor java.util.arrays; service.sort.sortservice; kelas public gabungan implements. Collections.sort (daftar); daftar pengembalian; }}
Konsumen
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 XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <tartif> <Artifactid> Java9-service-demo </Artifaccid <tartif> <Artifactid> Java9 <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>consumer-demo</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>service-sort</artifactId> <version> 0.0.1-Snapshot </version> </dependency> </dependencies> </joy Project>
Perhatikan bahwa tidak ada dependensi untuk kelas implementasi yang ditambahkan di sini
Modul-Info.java
Modul Konsumen {membutuhkan service.sort;} Utama
kelas publik {public static void main (string [] args) {System.out.println ("Urutkan layanan konsumen dimulai."); Daftar <Integer> Data = ArrayList baru <Integer> (); data.add (5); data.add (3); data.add (10); data.add (2); data.add (8); Sortservice sortservice = sortservice.getProviderInstancelazy (); if (sortservice! = null) {sortservice.sortlist (data); } System.out.println (data); System.out.println ("finish"); }}Kompilasi dan jalankan
Kompilasi
MVN Clean Instal
Ini dieksekusi di direktori root
Menggunakan gelembung
Salinan kode adalah sebagai berikut:
java --dan-path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-ble-bble/target.service.jar:.service-sort-bubble/target/service.jar:.sort--bble-bubble/target.service konsumen/konsumen
Perhatikan bahwa toples gelembung ke jalur modul ditambahkan di sini
Keluaran
Urutkan layanan konsumen dimulai.
Gunakan Bubblesort
[2, 3, 5, 8, 10]
menyelesaikan
Gunakan gabungan
Salinan kode adalah sebagai berikut:
java --dan-path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.1.1-snapshot.jar:.service-sort-merge/target.sarn--service.jar: konsumen/konsumen
Perhatikan bahwa menggabungkan toples ke jalur modul ditambahkan di sini
Keluaran
Urutkan layanan konsumen dimulai.
menggunakan mergeSort
[2, 3, 5, 8, 10]
menyelesaikan
Kedua implementasi layanan ditambahkan
Salinan kode adalah sebagai berikut:
java--Module-Path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-s ort-bubble/target/service-sort-bubble-0.0.1-snapshot.jar: ./ service-sort-merge/target/service-sort-rge-0.0.1-snapshot.jar -Modul Konsumen/Konsumen.Main
atau
Salinan kode adalah sebagai berikut:
java--Module-Path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-s ORT-MERGE/Target/Service-Sort-Merge-0.0.1-snapshot.jar: ./ Service-Sort-Bubble/Target/Service-Sort-Bubble-0.0.1-snapshot.jar -Modul Konsumen/Konsumen.Main
Keluaran
Urutkan layanan konsumen dimulai.
Gunakan Bubblesort
[2, 3, 5, 8, 10]
menyelesaikan
Tampaknya itu tidak ada hubungannya dengan urutan menambah jalan. Bahkan jika paket gabungan gabungan ditempatkan di depannya, itu masih merupakan gelembung.
ringkasan
Di Java6, sudah ada ServiceLoader, tetapi pada saat itu, itu diandalkan untuk membuat file nama jalur lengkap untuk antarmuka layanan di direktori Meta-Inf/Services dari Paket JAR, dan menulis nama jalur lengkap dari kelas implementasi. Setelah pengenalan modularisasi, Java9 juga mendukung deklarasi penyedia layanan dan informasi konsumen di Module-Info.java. Dengan cara ini, sistem modul dapat mendukung ServiceLoader tanpa menggunakan metode deklarasi meta-INF asli.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.