ในบทความก่อนหน้านี้ฉันแนะนำวิธีการใช้ XSD เพื่อตรวจสอบไฟล์กำหนดค่า SQLMapper ของ MyBatis '(1) เพื่อนที่ต้องการมันสามารถอ้างถึงมันได้
เขียนไฟล์ XSD จากนั้นดูวิธีการใช้ไฟล์ XSD เพื่อตรวจสอบและแยกวิเคราะห์ไฟล์ SQLMapper นั่นคือใช้เมธอด doparsesqlmapperresourceWithSchema ()
เพื่อที่จะใช้ฟังก์ชั่นนี้มีสองข้อกำหนดพื้นฐาน:
(1) ความเข้ากันได้: จำเป็นต้องเข้ากันได้กับการกำหนดค่าดั้งเดิมของ mybatis ความเข้ากันได้สองระดับ หนึ่งคือการใช้การตรวจสอบ DTD ดังที่ได้กล่าวไว้ก่อนหน้านี้ไม่มีปัญหากับความเข้ากันได้เมื่อทำตามกระบวนการดั้งเดิม อีกอย่างคือการใช้การตรวจสอบ XSD แต่ก็ต้องเข้ากันได้กับการกำหนดค่าดั้งเดิมของ mybatis ในอีกด้านหนึ่งความเข้ากันได้นี้รับประกันได้จากไฟล์ XSD ที่แก้ไขไว้ด้านบนและในทางกลับกันก็ต้องรับประกันจากการแยกวิเคราะห์ XML
(2) การขยายความสามารถ: วัตถุประสงค์ของการปรับเปลี่ยนคือการขยายความสามารถในการขยายดังนั้นการขยายความสามารถเป็นข้อกำหนดพื้นฐาน อย่างไรก็ตามความสามารถในการปรับขนาดนั้นไม่ได้เป็นไปตามอำเภอใจและจำเป็นต้องขยายออกไปตามข้อกำหนดซึ่งเป็นไฟล์ XSD ที่กำหนดเอง
เพื่อให้เป็นไปตามข้อกำหนดพื้นฐานสองประการต่อไปนี้เป็นความคิดของฉันส่วนใหญ่วาดบนเนมสเปซที่กำหนดเองของฤดูใบไม้ผลิ:
1. สร้าง EntityResolver และอ่านไฟล์การกำหนดค่าของโหมดที่ระบุภายใต้ classPath เช่น: "classpath*: **/dysd-*-namespaces.ini"
2. กำหนดข้อมูลเมตาเนมสเปซในไฟล์ INI เช่น:
ใช้เนมสเปซเป็นชื่อของส่วน สคีมาและตัวแยกวิเคราะห์ด้านล่างแสดงถึงไฟล์ XSD และคลาสการใช้งานตัวแยกวิเคราะห์ของเนมสเปซตามลำดับ ด้วยวิธีนี้คุณสามารถค้นหาไฟล์การตรวจสอบตามเนมสเปซ XSD ใน XML และมีรายการแยกวิเคราะห์
ภาพประกอบ:
การกำหนดค่าคอมมอนส์ของ Apache ให้การอ่าน API สำหรับไฟล์รูปแบบ INI
ในฤดูใบไม้ผลิฉันใช้ meta-inf/spring.schemas และ meta-inf/spring.handlers เพื่อจัดเก็บไฟล์ XSD และคลาสการใช้งานตัวแยกวิเคราะห์ ที่นี่ฉันแก้ไขเพื่อใช้การกำหนดค่าไฟล์กลางของ INI
เนื่องจากกำลังอ่านไฟล์ INI ที่ตอบสนองอักขระไวด์การ์ดภายใต้ ClassPaths ทั้งหมดจึงสามารถขยาย namespaces อื่น ๆ ได้อย่างง่ายดาย สำหรับวิธีการใช้ XSD เพื่อตรวจสอบใน Java ฉันจะไม่เข้าไปดูรายละเอียดที่นี่
ฉันย่อยสลายการแยกวิเคราะห์ของ XML เป็นสามองค์ประกอบ: การแยกวิเคราะห์บริบทการแยกวิเคราะห์ไฟล์ วิธี DoparsesqlmapperresourceWithSchema () ก็กระชับมากเช่นกัน:
void doparsesqlmapperresourcewithschema (การกำหนดค่าการกำหนดค่า, ทรัพยากร mapperlocation) {isqlmapperparparserContext บริบท = ใหม่ SQLMApperParParSerConText (การกำหนดค่า); XMLPARSERUTILS.PARSEXMLอินเทอร์เฟซ Parser มีดังนี้:
อินเทอร์เฟซสาธารณะ iparser <e ขยาย iparsercontext> {pars void parse (e parsercontext, ตำแหน่งสตริง); parse public void parse (e parsercontext, string [] locationpatterns); การแยกพาร์สเป็นโมฆะสาธารณะบริบทการแยกวิเคราะห์และคลาสการใช้งาน Parser แบ่งออกเป็นสามระดับในทางกลับกัน:
(1) บริบทการแยกวิเคราะห์ทั่วไป:
ส่วนต่อประสานสาธารณะ iparserContext {ปัญหาสาธารณะ reporter getProblemReporter (); public eventListener getEventListener (); แหล่งข่าวสาธารณะ GetSourceExtractor () สภาพแวดล้อมสาธารณะ getenvironment ();};};คลาสการใช้งาน Parser ในระดับที่สอดคล้องกันส่วนใหญ่รับผิดชอบในการโหลดไฟล์ที่แยกวิเคราะห์ (เช่นการโหลดสตริงไวด์การ์ดลงในคอลเลกชันของวัตถุทรัพยากร) เพื่อให้มั่นใจว่าไม่มีการแยกวิเคราะห์ซ้ำและทำให้มั่นใจได้ว่าการดำเนินการพร้อมกัน
(2) บริบทการแยกวิเคราะห์ XML
อินเทอร์เฟซสาธารณะ IXMLPARSERCONTEXT ขยาย IPARSERCONTEXT {บูลีนสาธารณะ isNamEspaceAware (); Public Documentloader GetDocumentloader (); Public EntityResolver GetEntityResolver (); ข้อผิดพลาดสาธารณะ GeterRorHandler (); XMLParSerDelegate GetDelegate ();}คลาสการใช้งาน Parser ในระดับที่สอดคล้องกันส่วนใหญ่รับผิดชอบในการแปลงทรัพยากรเป็นวัตถุเอกสารและตรวจสอบในระหว่างกระบวนการแปลง
(3) บริบทการแยกวิเคราะห์ sqlmapper
อินเทอร์เฟซสาธารณะ ISQLMApperParSerConText ขยาย IXMLPARSERCONTEXT {การกำหนดค่าสาธารณะ getConfiguration ();}คลาสการใช้งาน Parser ในระดับที่สอดคล้องกันเป็นหลักในการค้นหาตัวแยกวิเคราะห์ในเนมสเปซที่องค์ประกอบรูทตั้งอยู่และใช้ตัวแยกวิเคราะห์เพื่อแยกวิเคราะห์เอกสาร
ในที่สุดการแยกวิเคราะห์จะถูกมอบหมายให้คลาส SchemasqlmapperNamespaceparser ในไฟล์การกำหนดค่า INI อย่างไรก็ตามเนื่องจากคลาสนี้จำเป็นต้องได้รับการกำหนดค่าในไฟล์ข้อความจึงไม่สะดวกสำหรับตัวสร้างที่มีพารามิเตอร์ดังนั้นจึงได้รับมอบหมายเพิ่มเติมไปยัง SchemasqlmapperParserDelegate:
schemasqlmappernamespaceparser ระดับสาธารณะใช้ inamespaceparser <isqlmapperparsercontext> {@overridepublic เป็นโมฆะเริ่มต้น () {} @OverridePublic Void Parse schemasqlmapperparserdelegate (parsercontext, เอกสาร, ทรัพยากร); delegate.parse ();}@overridepublic เป็นโมฆะ destory () {}}ณ จุดนี้การตรวจสอบ XSD เสร็จสมบูรณ์และพบพอร์ทัลการแยกวิเคราะห์ XML การแยกวิเคราะห์จริงที่ตามมาอยู่ใน schemasqlmapperparserdelegate
ข้างต้นคือวิธีการ (2) สำหรับการใช้ XSD เพื่อตรวจสอบไฟล์การกำหนดค่า SQLMapper ของ MyBatis 'ที่ตัวแก้ไขแนะนำให้คุณรู้จัก ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!