คำนำ
ณ ตอนนี้เวอร์ชัน JDK ได้รับการปรับปรุงเป็น 10 แม้ว่าวงจรชีวิตของ Java9 จะเป็นเพียงครึ่งปี แต่ฉันคิดว่าการเปลี่ยนแปลงที่เกิดจากรุ่นนี้ไม่สามารถลบล้างได้ มันเป็นนวัตกรรมที่ฝังลึกครั้งแรกในสถาปัตยกรรมและการพึ่งพา มาเรียนรู้เพิ่มเติมด้านล่าง
ฟังก์ชั่นแบบแยกส่วนมีวัตถุประสงค์หลายประการ:
1. การก่อสร้างโครงการแบบแยกส่วน
ในความเป็นจริงการทำให้เป็นโมดูลเองนั้นไม่ยากที่จะเข้าใจ เราใช้ Maven หรือ Gradle เพื่อสร้างโครงการที่มีโมดูลมากเกินไป จากนั้นเรายังสามารถสร้างโครงการโมดูลาร์โครงการใน Java9 ดังแสดงในรูป:
ให้ความสนใจกับประเด็นต่อไปนี้:
1. โปรดสร้างไฟล์คำอธิบายแบบแยกส่วนที่เรียกว่า module-info.java ภายใต้แต่ละโมดูล
2. กำหนดค่าการพึ่งพาโมดูลในแนวคิด ที่นี่หากโครงการของเราโมดูลพอร์ตของเราขึ้นอยู่กับโมดูลของนักเรียนเราสามารถตั้งค่าได้เช่นนี้:
ค้นหาไอคอนตัวเลือกนี้: และตั้งค่าเช่นนี้เพื่อเพิ่มการพึ่งพา:
หากคุณต้องการตั้งค่าการพึ่งพาสำหรับโครงการอื่น ๆ โปรดตั้งค่าด้วยวิธีนี้
2. ขั้นตอนการใช้งาน
2.1. student.service โมดูล
2.1.1. เขียน Module-info.java ของ Sudentservice
รหัสตัวอย่าง:
นำเข้า com.bdqn.lyrk.student.service.secondstudentservice; นำเข้า com.bdqn.lyrk.student.service.api.istudentservice;/** * คลาสคำอธิบายแบบโมดูล, การรวมกันในไดเรกทอรีรากของไฟล์แหล่งที่มาของแต่ละโมดูล * .... * * [เปิด] ชื่อโมดูลโมดูล { * ต้องใช้ชื่อโมดูล [คงที่ | สแตติก | สแตติก]; * ชื่อแพ็คเกจส่งออก [ไปยังชื่อโมดูล] * ชื่อผู้ให้บริการชื่ออินเตอร์เฟสด้วย [คลาสการใช้งานอินเตอร์เฟส, .... ] * ใช้ชื่ออินเตอร์เฟส * *} * ** @author chen.nie * @date 2018/4/18 **/module student.service {ส่งออก com.bdqn.lyrk.student.service.service.service. ให้บริการ istudentservice กับ SecondStudentService;}2.1.2. กำหนดอินเทอร์เฟซ
แพ็คเกจ com.bdqn.lyrk.student.service.api; อินเทอร์เฟซสาธารณะ istudentservice {void study ();}2.1.3. กำหนดคลาสการใช้งาน
แพ็คเกจ com.bdqn.lyrk.student.service; นำเข้า com.bdqn.lyrk.student.service.api.istudentservice; ชั้นเรียนสาธารณะ SecondStudentservice ใช้ istudentservice {@Override การศึกษาโมฆะสาธารณะ () {system.out.println ( -2.2. Project.portal Module
2.2.1. เขียน module-info.java
นำเข้า com.bdqn.lyrk.student.service.api.istudentservice; Project.portal {ใช้ istudentservice; ต้องการนักเรียนสกรรมกริยาบริการ;}2.2.2. เขียนวิธีหลัก
แพ็คเกจ com.bdqn.lyrk.portal; นำเข้า com.bdqn.lyrk.student.service.api.istudentservice; นำเข้า java.util.serviceloader; ชั้นเรียนสาธารณะหลัก Studentservices.findfirst (). get (). การศึกษา (); -
หลังจากทำงานแล้วเราจะได้ผลลัพธ์ที่สอดคล้องกัน:
3. การกำหนดค่าทั่วไปของไฟล์โมดูล -info.java
3.1. เกี่ยวกับคำหลักเปิด
เปิด: หากคำหลักนี้ถูกโหลดบนโมดูลการมองเห็นคลาสภายใต้แพ็คเกจส่งออกผ่านการส่งออกจะสูงที่สุด เราสามารถสร้างวัตถุและคุณสมบัติการเข้าถึงผ่านการสะท้อนกลับ
3.2. เกี่ยวกับคำหลักส่งออก
หลังจากที่เรากำหนดโมดูลเราสามารถระบุแพ็คเกจที่สามารถเข้าถึงได้โดยโมดูลใด ๆ โดยโมดูลอื่น ๆ และคำหลักส่งออกมีบทบาทนี้ นอกจากนี้เรายังสามารถร่วมมือกับเพื่อระบุโมดูลที่สามารถเข้าถึงเนื้อหาของแพ็คเกจ
ชื่อแพ็คเกจการส่งออกไวยากรณ์ [ถึง] ชื่อโมดูล
การส่งออก <package>; Exports <package> ถึง <Module1>, <Module2> ... ;
3.3. เปิดคำหลัก
การเปิดนั้นคล้ายกับการเปิด หากเพิ่มคำหลักเปิดลงในโมดูลแพ็คเกจการส่งออกที่ส่งออกโดยค่าเริ่มต้นในโมดูลจะอยู่ในรูปแบบของการเปิด
โมดูล n {ส่งออก com.jdojo.claim.model; เปิด com.jdojo.claim.model;}3.4. ต้องใช้คำหลัก
คำหลักนี้ประกาศการพึ่งพาระหว่างโมดูลปัจจุบันและโมดูลอื่น คล้ายกับการพึ่งพาใน Maven
ต้องการ <DODULE>; ต้องใช้สกรรมกริยา <DODULE>; ต้องใช้สแตติก <DODULE>; ต้องใช้สแตติกสแตติก <DODULE>; ต้องใช้สแตติกสแตติก <DODULE>;
ตัวดัดแปลงแบบคงที่ยังสามารถเพิ่มลงในคำสั่งที่ต้องการซึ่งหมายความว่าการพึ่งพานั้นจำเป็นต้องใช้ในเวลาคอมไพล์ แต่เป็นทางเลือกที่รันไทม์ ตัวดัดแปลงสกรรมกริยาในคำสั่งต้องการจะทำให้เกิดการพึ่งพาโดยนัยสำหรับโมดูลอื่น ๆ ขึ้นอยู่กับโมดูลปัจจุบัน โปรดดูรูปต่อไปนี้:
ที่นี่เราสามารถดูไฟล์ module-info.class ภายใต้โมดูล java.se:
/ * * ลิขสิทธิ์ (c) 2014, Oracle และ/หรือ บริษัท ในเครือ สงวนลิขสิทธิ์ * Oracle กรรมสิทธิ์/เป็นความลับ การใช้งานขึ้นอยู่กับข้อกำหนดใบอนุญาต * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <p> * โมดูลที่กำหนด corba และ java ee apis ไม่ต้องการโดย * โมดูลนี้ แต่พวกเขาต้องการโดย * <a href = "java.e.ee-summary.html"> {@code java.se.ee} </a> โมดูล * * <dl> * <dt style = "Font-Family: 'dejavu Sans', Arial, Helvetica, Sans serif"> เป็นทางเลือกสำหรับแพลตฟอร์ม Java SE: </dt> * <dd> * <a href = "../ specs/jni/index.html" href = "../ specs/jvmti.html"> Java Virtual Machine Tool Interface (jvm ti) </a> <br> * <a href = "../ specs/jdwp/jdwp-spec.html"> java debug protocol (jdwp) </a> @ModuleGraph * @Since 9 */โมดูล java.se {ต้องใช้ java.compiler สกรรมกริยา; ต้องใช้ Java.Datatransfer สกรรมกริยา; ต้องใช้ Java.desktop สกรรมกริยา; ต้องใช้ java transitive.instrument; ต้องใช้ Java.logging สกรรมกริยา; ต้องใช้การจัดการ Java.management ต้องใช้ Java.Management.rmi; ต้องใช้ Java.naming สกรรมกริยา; ต้องใช้ Java.prefs สกรรมกริยา; ต้องใช้ java.rmi transitive; ต้องใช้ Java.scripting สกรรมกริยา; ต้องใช้ Java.security.jgss สกรรมกริยา ต้องใช้ Java.security.sasl สกรรมกริยา ต้องใช้ java.sql สกรรมกริยา; ต้องใช้ Java.sql.Rowset สกรรมกริยา ต้องใช้ java.xml transitive; ต้องใช้ Java.xml.crypto;}ในเวลานี้เราต้องการ Java.se เท่านั้นและเราจะแนะนำการพึ่งพาทั้งหมดภายใต้โมดูลนี้ทางอ้อม
3.5. ใช้และคำหลักของผู้ให้บริการ
Java อนุญาตให้ใช้กลไกผู้ให้บริการที่แยกผู้ให้บริการและผู้ใช้บริการแยกต่างหาก JDK 9 อนุญาตให้ใช้บริการโดยใช้คำสั่งและให้คำสั่ง ใช้คำสั่งเพื่อระบุชื่อของอินเทอร์เฟซบริการและโมดูลปัจจุบันจะค้นหาและโหลดโดยใช้คลาส java.util.serviceloader โปรดดูตัวอย่างก่อนหน้าสำหรับรหัส หมายเหตุ: คลาสที่จัดทำโดยผู้ให้บริการจะต้องอยู่ภายใต้โมดูลเดียวกันและการใช้งานโมดูลอื่นไม่สามารถอ้างอิงได้ในปัจจุบัน ตัวอย่างเช่น: StudentserviceImpl สามารถมีอยู่ภายใต้โมดูลของนักเรียนเท่านั้นและการใช้งานอินเตอร์เฟสของผู้ให้บริการโมดูล Service ในโมดูลอื่น ๆ ไม่อนุญาตให้ใช้
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com