ลำดับ
บทความนี้ส่วนใหญ่ศึกษาวิธีการสร้าง Java9 Multi Module และตัวอย่างบริการใน Maven
หนอง
โครงการทั้งหมดเหมือนกับโครงสร้างวิศวกรรมแบบหลายโมดูล Maven แบบดั้งเดิม โมดูลใน Java9 สอดคล้องกับโมดูลในโครงการ Maven นี่คือไฟล์ POM ในไดเรกทอรีรูท:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" <ArtIfactId> Java9-Service-Demo </artifactid> <sersion> 0.0.1-Snapshot </เวอร์ชัน> <modules> <module> ผู้บริโภค-DEMO </dole> <module> บริการ </โมดูล> <DODULE> บริการ </โมดูล> <Cackaging> POM </packaging> <properties> <project.build.sourceencoding> UTF-8 </project.build.sourceencoding> <!-ให้ Intellij รวบรวม Java9 อย่างถูกต้อง <Maven.Compiler.Target> 9 </maven.compiler.target> </premerties> <uffer> <pluginmanagement> <plugins> <plugins> <slugins> <release> 9 </release> </การกำหนดค่า> </plugins> </pluginmanagement> </ufferive> </project>
นี่คือการจัดการ Maven-Compiler-Plugin และการเปิดตัวได้รับการกำหนดค่าเป็น 9 เนื่องจาก Java9 รองรับการเปิดตัวหลายรุ่นจึงสามารถรองรับ Java หลายรุ่นในเวลาเดียวกัน มันถูกรวบรวมเป็นเวอร์ชัน Java9 ที่นี่
การจัดเรียง
นี่คือโมดูลอินเทอร์เฟซบริการ
Module Service.sort {Exports Service.sort; ใช้ service.sort.sortservice;} ที่นี่มีการประกาศการใช้งาน SortService ว่าจำเป็นต้องใช้ ServiceLoader เพื่อโหลดอินสแตนซ์บริการในโมดูลนี้
ส่วนต่อประสานสาธารณะ SortService {public <t ขยายการเปรียบเทียบ> รายการ <t> sortlist (รายการ <t> รายการ); Public Static Sortservice GetProviderInstancelazy () {สตรีม <ผู้ให้บริการ <SortService>> ผู้ให้บริการ = servicEloader.load (sortservice.class) .Stream (); // วิธีการของผู้ให้บริการจะไม่สร้างอินสแตนซ์จนกว่าจะได้รับบริการ SortService = Providers.map (ผู้ให้บริการ :: GET) .FINDANY () .orelse (NULL); บริการส่งคืน; - ในขณะที่ประกาศอินเทอร์เฟซวิธีการคงที่จะถูกเพิ่มลงในอินสแตนซ์ของบริการโหลด
บริการจัดเรียง
หนอง
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ผู้ปกครอง> <atifactid> java9-service-demo <Sersion> 0.0.1-SNAPSHOT </Sersion> </Parent> <S ModelVersion> 4.0.0 </ModelVersion> <roupId> com.example </groupId> <ratifactid> บริการ ------- บับเบิ้ล </artifactid> <packaging> jar </packaging> <Sersion> 0.0.1-SNAPSHOT </เวอร์ชัน> </การพึ่งพาอาศัย> </pendencies> </project>
เพิ่มการพึ่งพาในแพ็คเกจ API ที่นี่
Module-info.java
Module Service.sort.bubble {ต้องการ Service.sort; ให้บริการ SORT.SORTSERVICE ด้วย sort.impl.bubble.bubblesort;} ที่นี่มีการระบุว่า bubblesort ให้การใช้งาน Sortservice
ฟองสบู่
คลาสสาธารณะ Bubblesort ใช้ SortService {Public <t ขยายการเปรียบเทียบ> รายการ <t> sortlist (รายการ <t> รายการ) {system.out.println ("ใช้ bubblesort"); สำหรับ (int outer = 0; outer <list.size ()-1; outer ++) {สำหรับ (int inner = 0; inner <list.size ()-outer-1; inner ++) {ถ้า (list.get.get (inner) .compareto (list.get.get.get.get }}} รายการส่งคืน; } ส่วนตัว <t> การแลกเปลี่ยนโมฆะ (รายการ <t> รายการ, int inner) {t temp = list.get (ภายใน); list.set (inner, list.get (inner + 1)); list.set (inner + 1, temp); -บริการ-เมอร์จ
หนอง
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ผู้ปกครอง> <atifactid> java9-service-demo <Sersion> 0.0.1-SNAPSHOT </Sersion> </Parent> <S ModelVersion> 4.0.0 </ModelVersion> <roupId> com.example </groupId> <ratifactid> บริการ-เมอร์จ </artifactid> <packaging> jar </packaging> <Sersion> 0.0.1-SNAPSHOT </เวอร์ชัน> </การพึ่งพาอาศัย> </pendencies> </project>
Module-info.java
Module Service.sort.merge {ต้องการ Service.sort; ให้บริการ SORT.SORTSERVICE ด้วย sort.impl.merge.mergesort;} นี่คือการใช้งาน Mergesort เป็นอินเทอร์เฟซ SortService
การผสาน
นำเข้า java.util.list; นำเข้า java.util.arraylist; นำเข้า java.util.collections; นำเข้า java.util.arrays; นำเข้าบริการบริการ. sortservice; คลาสสาธารณะ Mergesort ใช้บริการเรียงลำดับ {สาธารณะ collections.sort (รายการ); รายการคืน; -ผู้บริโภค
หนอง
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ผู้ปกครอง> <atifactid> java9-service-demo <Sersion> 0.0.1-SNAPSHOT </Sersion> </Parent> <S ModelVersion> 4.0.0 </modelVersion> <roupId> com.example </groupId> <ratifactid> ผู้บริโภค-Demo </artifactid> <packaging> jar </packaging> <Sersion> 0.0.1-SNAPSHOT </เวอร์ชัน> </การพึ่งพาอาศัย> </pendencies> </project>
โปรดทราบว่าไม่มีการพึ่งพาคลาสการใช้งานที่เพิ่มขึ้นที่นี่
Module-info.java
โมดูลผู้บริโภค {ต้องการ service.sort;} หลัก
คลาสสาธารณะหลัก {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {system.out.println ("ผู้บริโภคบริการเรียงลำดับเริ่มต้น"); รายการ <จำนวนเต็ม> data = new ArrayList <จำนวนเต็ม> (); data.add (5); data.add (3); data.add (10); data.add (2); data.add (8); SortService sortservice = sortservice.getProviderInstancelazy (); if (sortservice! = null) {sortservice.sortlist (ข้อมูล); } system.out.println (ข้อมูล); System.out.println ("เสร็จสิ้น"); -รวบรวมและเรียกใช้
การรวบรวม
การติดตั้ง MVN Clean
สิ่งนี้ถูกดำเนินการในไดเรกทอรีรูท
ใช้ฟองสบู่
การคัดลอกรหัสมีดังนี้:
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 ผู้บริโภค/ผู้บริโภค
โปรดทราบว่ามีการเพิ่มโถ Bubble ไปยัง Module-Path ที่นี่
เอาท์พุท
จัดเรียงผู้บริโภคบริการเริ่มต้น
ใช้ Bubblesort
[2, 3, 5, 8, 10]
เสร็จ
ใช้การผสาน
การคัดลอกรหัสมีดังนี้:
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-merge/target/sertifet ผู้บริโภค/ผู้บริโภค
โปรดทราบว่าเพิ่มโถผสานลงในโมดูลพา ธ ที่นี่
เอาท์พุท
จัดเรียงผู้บริโภคบริการเริ่มต้น
ใช้ Mergesort
[2, 3, 5, 8, 10]
เสร็จ
มีการเพิ่มการใช้งานบริการทั้งสอง
การคัดลอกรหัสมีดังนี้:
Java-เส้นทางโมดูล ./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-merge-0.0.1-snapshot.jar -ผู้บริโภค/ผู้บริโภคโมดูล
หรือ
การคัดลอกรหัสมีดังนี้:
Java-เส้นทางโมดูล ./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 -ผู้บริโภค/ผู้บริโภคโมดูล
เอาท์พุท
จัดเรียงผู้บริโภคบริการเริ่มต้น
ใช้ Bubblesort
[2, 3, 5, 8, 10]
เสร็จ
ดูเหมือนว่ามันจะไม่มีส่วนเกี่ยวข้องกับคำสั่งของการเพิ่มไปยังเส้นทาง แม้ว่าแพ็คเกจการผสานจะวางไว้ด้านหน้าของมัน แต่ก็ยังคงเป็นฟอง
สรุป
ใน Java6 มี serviceloader อยู่แล้ว แต่ในเวลานั้นมันพึ่งพาการสร้างไฟล์ชื่อเส้นทางเต็มสำหรับอินเทอร์เฟซบริการในไดเรกทอรี Meta-Inf/Services ของแพ็คเกจ JAR และเขียนชื่อเส้นทางเต็มของคลาสการใช้งาน หลังจากการเปิดตัวของการแยกส่วน Java9 ยังสนับสนุนการประกาศของผู้ให้บริการและข้อมูลผู้บริโภคในโมดูล -info.java ด้วยวิธีนี้ระบบโมดูลสามารถรองรับ ServiceLoader โดยไม่ต้องใช้วิธีการประกาศ Meta-INF ดั้งเดิม
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น