ในไฟล์การกำหนดค่าฤดูใบไม้ผลิเรามักจะตั้งค่าคุณสมบัติประเภทต่าง ๆ ของถั่วผ่านค่าตัวอักษรและฟังก์ชั่นนี้ถูกนำไปใช้ผ่านตัวแก้ไขคุณสมบัติ
คลาสใดก็ตามที่ใช้อินเตอร์เฟส java.beans.propertyeditor เป็นตัวแก้ไขคุณสมบัติ มันสามารถแปลงค่าภายนอกที่จะตั้งค่าเป็นประเภทที่สอดคล้องกันภายใน JVM ดังนั้นตัวแก้ไขคุณสมบัติจึงเป็นตัวแปลงประเภท
1 Javabean Editor
บรรณาธิการ Javabean ที่พัฒนาโดย Sun เป็นส่วนใหญ่สำหรับ IDE ช่วยให้ IDE ตั้งค่าคุณสมบัติของ Javabeans ด้วยสายตา
Java กำหนดวิธีการตั้งค่าคุณสมบัติ Javabean ผ่าน java.beans.propertyeditor ผ่าน beaninfo มันจะอธิบายถึงคุณสมบัติของ Javabean ที่ปรับแต่งได้ นอกจากนี้ยังอธิบายถึงการโต้ตอบระหว่างคุณสมบัติที่ปรับแต่งได้และ PertyEditor
การติดต่อระหว่าง Beaninfo และ Javabean นั้นถูกสร้างขึ้นผ่านการตั้งชื่อบรรทัดฐานระหว่างทั้งสอง beaninfo ที่สอดคล้องกับ Javabean ใช้ข้อกำหนดการตั้งชื่อต่อไปนี้: <bean> beaninfo ตัวอย่างเช่น beaninfo ที่สอดคล้องกับ bookbean คือ bookbeanbeaninfo เมื่อ Javabean ลงทะเบียนกับ IDE พร้อมกับตัวแก้ไขแอตทริบิวต์เมื่อ Javabean ถูกปรับแต่งในอินเทอร์เฟซการพัฒนา IDE จะพบ beaninfo ที่สอดคล้องกันตามข้อกำหนด Javabean จากนั้นค้นหาคำอธิบายแอตทริบิวต์ Javabean
Java จัดเตรียมผู้จัดการสำหรับการจัดการบรรณาธิการคุณสมบัติเริ่มต้น: PropertyEditorManager ซึ่งถือบรรณาธิการทรัพย์สินประเภททั่วไปบางประเภท หากคุณสมบัติประเภททั่วไปของ javabean ไม่ได้ระบุตัวแก้ไขคุณสมบัติของตนอย่างชัดเจนผ่าน beaninfo IDE จะใช้ตัวแก้ไขเริ่มต้นโดยอัตโนมัติสำหรับคุณสมบัติที่สอดคล้องกันที่ลงทะเบียนใน PropertyEditorManager
1.1 PropertyEditor
PropertyEditor เป็นอินเทอร์เฟซตัวแก้ไขคุณสมบัติที่กำหนดวิธีการเชื่อมต่อที่แปลงค่าชุดภายนอกเป็นค่าคุณสมบัติ Javabean ภายใน วิธีการอินเทอร์เฟซหลักมีการอธิบายดังนี้:
| วิธี | อธิบาย |
|---|---|
| Object GetValue () | ส่งคืนค่าปัจจุบันของแอตทริบิวต์ประเภทพื้นฐานจะถูกห่อหุ้มลงในประเภท wrapper ที่สอดคล้องกัน |
| เป็นโมฆะ setValue (Object NewValue) | ตั้งค่าของแอตทริบิวต์ประเภทพื้นฐานจะถูกส่งผ่านเป็นประเภท wrapper |
| สตริง getastext () | ใช้สตริงเพื่อแสดงวัตถุแอตทริบิวต์เพื่อให้ตัวแก้ไขแอตทริบิวต์ภายนอกสามารถแสดงภาพได้ ส่งคืนค่าเริ่มต้นโดยค่าเริ่มต้นซึ่งระบุว่าไม่สามารถแสดงคุณสมบัติเป็นสตริงได้ |
| เป็นโมฆะ setastext (ข้อความสตริง) | ใช้สตริงเพื่ออัปเดตค่าภายในของคุณสมบัติซึ่งโดยทั่วไปจะส่งผ่านจากตัวแก้ไขคุณสมบัติภายนอก |
| สตริง [] getTags () | ส่งคืนอาร์เรย์ของสตริงที่แสดงถึงค่าแอตทริบิวต์ที่ถูกต้องเพื่อให้ตัวแก้ไขแอตทริบิวต์สามารถแสดงด้วยวิธีต่อไปนี้ ส่งคืนค่าเริ่มต้นโดยค่าเริ่มต้น |
| String getJavainitializationString () | แสดงค่าเริ่มต้นสำหรับคุณสมบัติซึ่งตัวแก้ไขคุณสมบัติใช้เป็นค่าเริ่มต้นสำหรับคุณสมบัติ |
อินเทอร์เฟซ PropertyEditor เป็นสะพานสื่อสารระหว่างค่าคุณสมบัติภายในและค่าการตั้งค่าภายนอก
Java จัดเตรียมคลาสการใช้งานที่สะดวกสำหรับ PropertyEditor: PropertyEditorSupport ซึ่งใช้อินเทอร์เฟซ PropertyEditor เราสามารถออกแบบโปรแกรมแก้ไขทรัพย์สินของเราเองโดยขยายคลาสนี้
1.2 คำอธิบายแอตทริบิวต์ถั่ว (beaninfo)
Beaninfo อธิบายคุณสมบัติที่แก้ไขได้ใน Javabean และตัวแก้ไขคุณสมบัติที่เกี่ยวข้องแต่ละคุณสมบัติสอดคล้องกับคุณสมบัติ Descriptor PropertyDescriptor
ตัวสร้างของ PropertyDescriptor มีพารามิเตอร์สองพารามิเตอร์: PropertyDescriptor (String PropertyName, คลาส BeanClass) โดยที่ PropertyName เป็นชื่อคุณสมบัติ; Beanclass เป็นคลาสที่สอดคล้องกับ Javabean
PropertyDescriptor ยังมีเมธอด setPropertyEditorClass (คลาส PertyEditorClass) ซึ่งระบุตัวแก้ไขสำหรับคุณสมบัติ Javabean
วิธีที่สำคัญที่สุดในอินเทอร์เฟซ BeanInfo คือ: PropertyDescriptor [] GetPropertyDescriptors () ซึ่งจะส่งคืนอาร์เรย์ตัวอธิบายคุณสมบัติ Javabean
คลาสการใช้งานที่ใช้กันทั่วไปสำหรับอินเทอร์เฟซ BeanInfo คือ SimpleBeanInfo ซึ่งเราสามารถใช้ฟังก์ชั่นที่กำหนดเองได้โดยขยายคลาสนี้
2 ตัวแก้ไขคุณสมบัติเริ่มต้นของฤดูใบไม้ผลิ
ตัวแก้ไขทรัพย์สินของฤดูใบไม้ผลินั้นแตกต่างจากตัวแก้ไขทรัพย์สินแบบดั้งเดิมสำหรับการพัฒนา IDE มันไม่มีอินเทอร์เฟซ UI และเพียงแค่แปลงค่าการกำหนดค่าข้อความในไฟล์การกำหนดค่าเป็นค่าที่สอดคล้องกันของคุณสมบัติถั่ว
ฤดูใบไม้ผลิให้ตัวแก้ไขคุณสมบัติเริ่มต้นสำหรับประเภทคุณสมบัติทั่วไปใน PertyEditorRegistRySupport ซึ่งแบ่งออกเป็น 3 หมวดหมู่หลักโดยมีทั้งหมด 32:
| พิมพ์ | อธิบาย |
|---|---|
| ชนิดข้อมูลพื้นฐาน | [1] ชนิดข้อมูลพื้นฐานเช่น: บูลีน, int, ฯลฯ ; [2] คลาสการห่อหุ้มประเภทข้อมูลพื้นฐานเช่น: บูลีน, จำนวนเต็ม, ฯลฯ ; [3] อาร์เรย์ชนิดข้อมูลพื้นฐาน: char [] และ byte []; [4] จำนวนมาก: BigDecimal และ BigInteger |
| ชั้นเรียนสะสม | คอลเลกชัน, set, sortedset, รายการและ SortedMap |
| ทรัพยากร | คลาส, คลาส [], ไฟล์, อินพุตสตรีม, สถานที่, คุณสมบัติ, ทรัพยากร [] และ URL |
มีตัวแปรประเภทแผนที่สองตัวใน PropertyEditorRegistRySupport ที่บันทึกบรรณาธิการทรัพย์สิน:
| ชื่อตัวแปร | อธิบาย |
|---|---|
| defaultEditors | ตัวแก้ไขที่บันทึกประเภทแอตทริบิวต์เริ่มต้นคีย์ขององค์ประกอบคือประเภทแอตทริบิวต์และค่าคืออินสแตนซ์ของแอตทริบิวต์ที่สอดคล้องกัน |
| ผู้กำหนดเอง | บันทึกตัวแก้ไขแอตทริบิวต์ที่ผู้ใช้กำหนดค่าคีย์ขององค์ประกอบจะเหมือนกับ Defaultitors |
3 ตัวแก้ไขคุณสมบัติสปริงแบบกำหนดเอง
หากแอปพลิเคชันของเรากำหนดคุณสมบัติพิเศษและต้องการกำหนดค่าค่าคุณสมบัติอย่างแท้จริงในไฟล์การกำหนดค่าเราสามารถเขียนโปรแกรมแก้ไขคุณสมบัติที่กำหนดเองและลงทะเบียนกับคอนเทนเนอร์สปริงเพื่อนำไปใช้งาน
บรรณาธิการทรัพย์สินเริ่มต้นของฤดูใบไม้ผลิส่วนใหญ่ขยายจาก java.beans.propertyeditorsupport เราสามารถปรับแต่งตัวแก้ไขคุณสมบัติโดยขยาย PermansEditorSupport ในสภาพแวดล้อมฤดูใบไม้ผลิคุณจะต้องแปลงค่าตามตัวอักษรในไฟล์การกำหนดค่าเป็นวัตถุประเภทคุณสมบัติและคุณไม่จำเป็นต้องจัดเตรียมอินเทอร์เฟซ UI ดังนั้นคุณจะต้องแทนที่วิธีการ setastext () ของ PropertyEditorSupport (∩_∩) O HAHA ~
สมมติว่าเรามีหนังสือเอนทิตีและผู้แต่งสองเล่มและเราหวังว่าเมื่อกำหนดค่าหนังสือเราสามารถตั้งชื่อผู้แต่งได้โดยตรง
book.java
หนังสือเรียนสาธารณะ { / *** ผู้แต่ง* / ผู้แต่งส่วนตัว; / *** ชื่อหนังสือ*/ ชื่อสตริงส่วนตัว; // ละเว้นวิธีการรับ/setter}ผู้เขียน. java
ผู้เขียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว; // ละเว้นวิธีการรับ/setter}ขั้นแรกให้ปรับแต่งบรรณาธิการทรัพย์สินของผู้แต่ง:
คลาสสาธารณะ CustomPropertyEditor ขยาย PropertyEditorSupport {@Override โมฆะสาธารณะ setAstatext (ข้อความสตริง) พ่นผิดกฎหมาย leginlArgumentException {ถ้า (text == null || text.length () == 0) {โยน unledalargumentException ใหม่ ("ข้อผิดพลาดรูปแบบ"); } ผู้เขียนผู้เขียน = ผู้เขียนใหม่ (); uther.setName (ข้อความ); // เรียกวิธีการของคลาสแม่ไปที่ setValue (ผู้แต่ง); - หากคุณใช้ beanfactory คุณจะต้องโทรไป registerCustomEditor(Class requiredType, PropertyEditor propertyEditor) ด้วยตนเองเพื่อลงทะเบียนโปรแกรมแก้ไขคุณสมบัติที่กำหนดเอง หากคุณกำลังใช้ ApplicationContext คุณจะต้องลงทะเบียน CustomEditorConfigurer ในไฟล์การกำหนดค่า CustomEditorConfigurer ใช้อินเทอร์เฟซ BeanFactoryPostProcessor ดังนั้นมันจึงเป็นเครื่องประมวลผลโรงงานสำหรับถั่ว
ตอนนี้ลงทะเบียนโปรแกรมแก้ไขคุณสมบัติที่กำหนดเอง:
<!-ลงทะเบียนตัวแก้ไขคุณสมบัติที่กำหนดเอง-> <bean> <property name = "customeditors"> <per> <!-คีย์: ประเภทคุณสมบัติ; ค่า: ตัวแก้ไขคุณสมบัติ-> <entry key = "net.deniro.spring4.editor.author" value = "net.deniro.spring4.editor.custompropertyeditor"/> </map> <property name = "Author" value = "Haruki Murakami"/> </ebean>
เมื่อตั้งค่าคุณสมบัติผู้แต่งของหนังสือรีจิสตรีตัวแก้ไขคุณสมบัติที่กำหนดเองจะถูกเรียกคืน เมื่อผู้แก้ไขคุณสมบัติ CustomPropertyEditor ที่สอดคล้องกับประเภททรัพย์สินของผู้เขียนพบว่าจะแปลง "Haruki Murakami" เป็นวัตถุผู้เขียน
ตามข้อกำหนด Java จะมองหาว่าชั้นเรียนของ <JavaBean>Editor มีอยู่ภายใต้แพ็คเกจคลาสเดียวกันของ Javabean หรือไม่ หากมีอยู่มันจะใช้ <JavaBean>Editor โดยอัตโนมัติเป็นตัวแก้ไขคุณสมบัติของ Javabean ฤดูใบไม้ผลิยังรองรับข้อกำหนดนี้
ดังนั้นหากมีคลาสโปรแกรมแก้ไขคุณสมบัติที่ชื่อว่า Authoreditor ภายใต้แพ็คเกจคลาสไม่จำเป็นต้องลงทะเบียนตัวแก้ไขคุณสมบัติที่กำหนดเองในไฟล์การกำหนดค่า o (∩_∩) o ฮ่าฮ่า ~
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น