จำนวนรูปทรงในภาพขนาดของเวกเตอร์แสดงจำนวนคะแนนบนเส้นชั้นความสูง เข้าใจ Javabeans
คำศัพท์ภาษาอังกฤษที่สอดคล้องกันคือ Introspector ซึ่งส่วนใหญ่ใช้ในการใช้งาน Javabeans Javabean เป็นคลาส Java พิเศษและบางวิธีตรงกับกฎการตั้งชื่อบางอย่าง หากบางวิธีในคลาส Java เป็นไปตามกฎการตั้งชื่อบางอย่างพวกเขาสามารถใช้เป็น Javabeans
Javabean เป็นคลาส Java พิเศษส่วนใหญ่ใช้เพื่อส่งข้อมูลข้อมูล วิธีการในคลาส Java นี้ส่วนใหญ่จะใช้ในการเข้าถึงเขตข้อมูลส่วนตัวและชื่อวิธีการนั้นสอดคล้องกับกฎการตั้งชื่อบางอย่าง
หากคุณต้องการส่งข้อมูลหลายข้อมูลระหว่างสองโมดูลคุณสามารถห่อหุ้มข้อมูลนี้ลงใน Javabean ซึ่งมักจะเรียกว่า ValueObject (VO สั้น ๆ ) ข้อมูลนี้ถูกเก็บไว้ในชั้นเรียนโดยใช้ฟิลด์ส่วนตัว หากค่าของฟิลด์เหล่านี้ถูกอ่านหรือตั้งค่าพวกเขาจะต้องเข้าถึงผ่านวิธีการที่สอดคล้องกันบางอย่าง คุณคิดว่าชื่อของวิธีการเหล่านี้ดีอย่างไร? คุณสมบัติของ Javabean ถูกกำหนดตามวิธีการตั้งค่าและ getter ในนั้นแทนที่จะขึ้นอยู่กับตัวแปรสมาชิกในนั้น หากวิธีการที่เรียกว่า setId มันหมายถึงการตั้งค่า ID เป็นภาษาจีน สำหรับตัวแปรใดที่คุณเก็บไว้มันจะใช้งานได้หรือไม่? หากวิธีการที่เรียกว่า getId หมายถึงการได้รับ ID เป็นภาษาจีน สำหรับตัวแปรที่คุณนำมาจากนั้นเหมาะสมหรือไม่? ลบคำนำหน้าชุดและส่วนที่เหลือคือชื่อแอตทริบิวต์ หากตัวอักษรตัวที่สองของส่วนที่เหลือเป็นตัวพิมพ์เล็กให้เปลี่ยนตัวอักษรตัวแรกของส่วนที่เหลือเป็นตัวเล็ก
ตัวอย่างเช่น:
ชื่อแอตทริบิวต์ของ setId () -> id
ชื่อแอตทริบิวต์ของ iSlast () -> ล่าสุด
ชื่อแอตทริบิวต์ของ setcpu คืออะไร? -> CPU
ชื่อแอตทริบิวต์ของ GetUps คืออะไร? -> ups
ในระยะสั้นเมื่อมีการใช้คลาสเป็น Javabean คุณสมบัติของ Javabean จะถูกอนุมานตามชื่อวิธีและไม่สามารถเห็นตัวแปรสมาชิกภายในคลาส Java ได้เลย
ชั้นเรียนที่สอดคล้องกับลักษณะของ Javabeans สามารถใช้เป็นชั้นเรียนปกติได้ แต่การใช้มันเป็น Javabean จะนำประโยชน์เพิ่มเติมบางอย่างก่อนที่เราจะเข้าใจและใช้ Javabeans! ประโยชน์มีดังนี้:
ในการพัฒนา Javaee มักใช้ Javabeans สภาพแวดล้อมจำนวนมากต้องการการดำเนินงานในโหมด Javabean หากคนอื่นใช้และต้องการสิ่งนี้คุณก็ไม่มีทางเลือก!
JDK จัดเตรียม APIs สำหรับการใช้งาน Javabeans และ APIs ชุดนี้เรียกว่าวิปัสสนา หากคุณต้องการเข้าถึง Private X ด้วยวิธีการ GetX วิธีการทำมันยากใช่ไหม? การใช้วิปัสสนาเพื่อใช้งาน Javabeans นั้นสะดวกกว่าการใช้คลาสธรรมดา
วิปัสสนาอย่างง่าย ๆ ของ Javabean
คลาส java.beans.propertydescriptor ส่วนใหญ่จะใช้เพื่อรับคุณสมบัติ javabean ในชุดคุณสมบัติวัตถุคลาสที่แน่นอนจากนั้นเรียกใช้วิธี getReadMethod () และ getWriteMethod () เพื่อให้ได้วิธีการรับและชุดที่สอดคล้องกัน
ตัวอย่างรหัส:
คลาสโดเมน:
[CPP] ViewPlainCopy
intmain ()
แพ็คเกจ usstc.lichunchun.bean; นำเข้า java.util.date; คลาสสาธารณะสะท้อน {วันเกิดส่วนตัว = วันที่ใหม่ (); int ส่วนตัว x; int สาธารณะ i; สตริงสาธารณะ str1 = "บอล"; สตริงสาธารณะ str2 = "บาสเก็ตบอล"; สตริงสาธารณะ str3 = "มัน {ขั้นสุดท้าย int prime = 31; int result = 1; result = prime * result + x; result = prime * result + y; return result;}@แทนที่บูลีนสาธารณะเท่ากับ (Object obj) {ถ้า (this == obj) return true; ถ้า (obj == null) return; false; ถ้า (y! = other.y) return; return true;}@reverride public String toString () {return str1 + ":" + str2 + ":" + str3;} public int getx () {return x;} void สาธารณะ setx (int x) {this.x = x; วันที่ getBirthday () {ส่งคืนวันเกิด;} โมฆะสาธารณะ setBirthday (วันเกิดวันที่) {this.birthday = วันเกิด;}}การวิปัสสนาอย่างง่าย:
แพ็คเกจ usstc.lichunchun.bean; นำเข้า java.beans.beaninfo; นำเข้า java.beans.intropsectionexception; นำเข้า java.beans.intropsctionException; นำเข้า java.beans.introspector; นำเข้า java.beans.propertydescription; java.lang.reflect.method; คลาสสาธารณะ introspectortest {โมฆะสาธารณะคงที่หลัก (สตริง [] args) โยนข้อยกเว้น {rechormpoint pt1 = new ReflectPoint (3, 5); String PropertyName = "X"; // "x"-> "x"-> "getx" 7; setProperty (pt1, propertyName, value); system.out.println (pt1.getx ());} โมฆะคงที่ส่วนตัว setProperty (วัตถุ PT1, สตริงอสังหาริมทรัพย์, ค่าวัตถุ) โยน IntrospectionException pt1.getClass ()); methodsetstx = pd.getWriteMethod (); methodsetx.invoke (pt1, ค่า);} วัตถุสแตติกส่วนตัว getProperty (วัตถุ PT1, สตริงคุณสมบัติ pt1.getClass ()); method methodgetx = pd.getreadmethod (); methodgetx.invoke (pt1);}}การดำเนินการครุ่นคิดที่ซับซ้อนเกี่ยวกับ Javabeans
ใช้วิธีการสำรวจคุณสมบัติของ Beaninfo ทั้งหมดเพื่อค้นหาและตั้งค่าคุณสมบัติ x ของวัตถุ refectpoint ในโปรแกรมให้ถือว่าชั้นเรียนเป็น javabean หมายถึงการเรียกวิธีการ introspector.getBeanInfo และวัตถุ beaninfo ที่เกิดขึ้นจะห่อหุ้มข้อมูลผลลัพธ์ของการรักษาคลาสนี้เป็น Javabean
การดำเนินการครุ่นคิดที่ซับซ้อน:
แพ็คเกจ usstc.lichunchun.bean; นำเข้า java.beans.beaninfo; นำเข้า java.beans.intropsectionexception; นำเข้า java.beans.intropsctionException; นำเข้า java.beans.introspector; นำเข้า java.beans.propertydescription; java.lang.reflect.method; คลาสสาธารณะ introspectortest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {rechormpoint pt1 = จุดสะท้อนใหม่ (3, 5); สตริงคุณสมบัติ = "x"; // "x"-> "x"-> "getx"-> methodgetx PropertyName); System.out.println (retval); ค่าวัตถุ = 7; setProperty (pt1, propertyName, ค่า); system.out.println (pt1.getx ());} ส่วนตัวคงที่ setProperty (Object PT1, PropertyName ใหม่ PropertyDescriptor (PropertyName, Pt1.getClass ()); Method Methodsetx = pd.getWriteMethod (); methodsetx.invoke (pt1, ค่า);} ส่วนตัววัตถุคงที่ getProperty (Object PT1, String PropertyName) PropertyDescriptor (PropertyName, Pt1.getClass ()); Method MethodGetX = pd.getReadMethod (); Methodgetx.invoke (PT1); */beaninfo beaninfo = introspector.getBeanInfo (pt1.getClass ()); PropertyDescriptor [] pds = beaninfo.getPropertyDescriptors (); Object retval = null; pd.getReadMethod (); retval = methodgetx.invoke (pt1); break;}} return retval;}}}การจัดการ Javabeans โดยใช้ชุดเครื่องมือ Beanutils
จากตัวอย่างการวิปัสสนาก่อนหน้านี้ใช้คลาส Beanutils เพื่อรับคุณสมบัติชุดดั้งเดิมก่อนจากนั้นตั้งค่าเป็นค่าใหม่ ผลลัพธ์ที่ส่งคืนเมื่อแอตทริบิวต์รับเป็นสตริง เมื่อแอตทริบิวต์ชุดสามารถยอมรับวัตถุประเภทใดก็ได้และมักจะใช้สตริง
ใช้คลาส PropertyUtils เพื่อรับคุณสมบัติชุดต้นฉบับก่อนจากนั้นตั้งค่าเป็นค่าใหม่ ผลลัพธ์ที่ส่งคืนเมื่อแอตทริบิวต์ Get เป็นประเภทดั้งเดิมของแอตทริบิวต์และเมื่อแอตทริบิวต์ชุดเป็นเพียงประเภทดั้งเดิมของแอตทริบิวต์
หมายเหตุ: ก่อนที่จะใช้สองคลาสนี้คุณต้องนำเข้าแพ็คเกจสองขวดคอมมอนส์-Beanutils.jar และคอมมอนส์-ล็อก 1.1.jar ในโฟลเดอร์ Lib ของโครงการ Eclipse และ AddtobuildPath
ตัวอย่างรหัส:
แพ็คเกจ usstc.lichunchun.bean; นำเข้า java.beans.beaninfo; นำเข้า java.beans.intropsectionexception; นำเข้า java.beans.intropsctionException; นำเข้า java.beans.introspector; นำเข้า java.beans.propertydescription; java.lang.reflect.method; นำเข้า org.apache.commons.beanutils.beanutils นำเข้า org.apache.commons.beanutils.propertyutils; ชั้นเรียนสาธารณะ introspectortest "x"; // "x"-> "x"-> "getx"-> methodgetx-> object retval = getProperty (pt1, propertyName); system.out.println (retval); ค่าวัตถุ = 7; setProperty (pt1, propertyName, ค่า); "x"). getClass (). getName ()); // สตริง beanutils.setProperty (pt1, "x", "9"); system.out.println (pt1.getx ());/* map = {ชื่อ: "zxx" อายุ: 18}; // */beanutils.setProperty (pt1, "วันเกิดเวลา", "111"); // สนับสนุนคุณลักษณะเชน System.out.println (beanutils.getProperty (pt1, "วันเกิด. เวลา"); "x"). getClass (). getName ()); // จำนวนเต็ม/* ความแตกต่างระหว่าง beanutils และ propertyUtils: beanutils ทำงาน javabeans ในรูปแบบสตริงสามารถใช้งานคลาสแผนที่และ Javabeans และแผนที่ PT1, String PropertyName, ค่าวัตถุ) พ่น IntrospectionException, ungleclAccessException, InvocationTargetException {PropertyDescriptor PD = ใหม่ PropertyDescriptor (PropertyName, Pt1.getClass ()); methodsetx = pd.getWriteMethod (); methodsetx.invoke (pt1, ค่า);} วัตถุคงที่ส่วนตัว getProperty (วัตถุ PT1, สตริงคุณสมบัติ Name) พ่น IntropcectionException, ungleclAccessException, InvocationTargetException {/* PropertyDescriptor PD = PropertyDescriptor ใหม่ Method MethodGetX = pd.getReadMethod (); Methodgetx.invoke (PT1); */beaninfo beaninfo = introspector.getBeanInfo (pt1.getClass ()); PropertyDescriptor [] pds = beaninfo.getPropertyDescriptors (); Object retval = null; pd.getReadMethod (); retval = methodgetx.invoke (pt1); break;}} return retval;}}}สรุป
ข้างต้นคือทั้งหมดที่เกี่ยวกับการวิเคราะห์อินสแตนซ์ของ Java ครุ่นคิดและฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!