Jumlah kontur dalam gambar, ukuran vektor mewakili jumlah titik pada kontur. Mengerti JavaBeans
Word Introspector bahasa Inggris yang sesuai adalah Introspector, yang terutama digunakan untuk mengoperasikan JavaBeans. Javabean adalah kelas Java khusus, dan beberapa metode memenuhi aturan penamaan tertentu. Jika beberapa metode di kelas Java memenuhi aturan penamaan tertentu, mereka dapat digunakan sebagai JavaBeans.
Javabean adalah kelas Java khusus, terutama digunakan untuk lulus informasi data. Metode di kelas Java ini terutama digunakan untuk mengakses bidang pribadi, dan nama metode sesuai dengan aturan penamaan tertentu.
Jika Anda ingin meneruskan beberapa informasi antara dua modul, Anda dapat merangkum informasi ini ke dalam Javabean, yang biasanya disebut ValueObject (singkatnya VO). Informasi ini disimpan di kelas menggunakan bidang pribadi. Jika nilai -nilai bidang ini dibaca atau diatur, mereka perlu diakses melalui beberapa metode yang sesuai. Menurut Anda apa nama metode ini baik? Sifat -sifat Javabean ditentukan berdasarkan metode setter dan getter di dalamnya, daripada berdasarkan variabel anggota di dalamnya. Jika metode ini disebut setid, itu berarti mengatur ID dalam bahasa Cina. Adapun variabel mana Anda menyimpannya, apakah itu akan berhasil? Jika metode ini disebut getID, itu berarti mendapatkan ID dalam bahasa Cina. Adapun variabel mana Anda mengambilnya, apakah itu tepat? Hapus awalan yang ditetapkan dan bagian yang tersisa adalah nama atribut. Jika huruf kedua dari bagian yang tersisa adalah huruf kecil, ubah huruf pertama dari bagian yang tersisa menjadi yang kecil.
Misalnya:
Nama atribut setid () -> id
nama atribut islast () -> terakhir
Apa nama atribut setCPU? -> CPU
Apa nama atribut Getups? -> up
Singkatnya, ketika kelas digunakan sebagai Javabean, sifat -sifat Javabean disimpulkan berdasarkan nama metode, dan tidak dapat melihat variabel anggota di dalam kelas Java sama sekali.
Kelas yang sesuai dengan karakteristik JavaBean dapat digunakan sebagai kelas normal, tetapi menggunakannya sebagai JavaBean pasti akan membawa beberapa manfaat tambahan sebelum kita dapat memahami dan menerapkan JavaBeans! Manfaatnya adalah sebagai berikut:
Dalam pengembangan Javaee, JavaBeans sering digunakan. Banyak lingkungan membutuhkan operasi dalam mode Javabean. Jika orang lain menggunakan dan membutuhkan ini, maka Anda tidak punya pilihan!
JDK menyediakan beberapa API untuk mengoperasikan Javabeans, dan set API ini disebut introspeksi. Jika Anda ingin mengakses Private X sendiri melalui metode GetX, bagaimana melakukannya sulit, bukan? Menggunakan introspeksi untuk mengoperasikan JavaBeans lebih nyaman daripada menggunakan kelas biasa.
Introspeksi sederhana JavaBean
Kelas Java.Beans.PropertyDescriptor terutama digunakan untuk mendapatkan properti JavaBean dalam set properti objek kelas tertentu, dan kemudian hubungi metode getReadMethod () dan getWritemethod () untuk mendapatkan metode GET dan set yang sesuai.
Contoh kode:
Kelas Domain:
[CPP] ViewPlainCopy
intmain ()
Paket Usstc.lichunchun.bean; Impor java.util.date; kelas publik Reflectpoint {private Date ulang tahun = tanggal baru (); int private int x; int y public; string publik str1 = "bola"; string publik str2 = "bola basket"; ini string str3 = "itcast"; public reflectpoint (int x, int y) {); ini. {final int prime = 31; int result = 1; hasil = prime * hasil + x; hasil = prime * hasil + y; hasil pengembalian;}@override public boolean sama (objek obj) {if (this == obj) return true; if (obj == null) return false; ifePpoint (getSclass ()! = obj.getclass () return) return; false; if (y! = Other.y) return false; return true;}@override public string toString () {return str1 + ":" + str2 + ":" + str3;} public int getx () {return x;} public void setx (int x) {this.x = x;} public int gety () {public return y; getBirthday () {return ulang tahun;} public void setBirthday (tanggal ulang tahun) {this.birthday = ulang tahun;}}Operasi introspeksi sederhana:
Paket usstc.lichunchun.bean; impor java.beans.beaninfo; impor java.beans.introspectionexception; impor java.beans.intospectionexception; impor java.beansceppector; impor java. java.lang.reflect.method; kelas publik introspectortest {public static void main (string [] args) melempar pengecualian {reflectpoint pt1 = new reflectpoint (3, 5); string propertyname = "x"; // "x"-> "x"-> "getx"-> Metodegetx-> getPropert 7;setProperty(pt1, propertyName, value);System.out.println(pt1.getX());}private static void setProperty(Object pt1, String propertyName, Object value) throws IntrospectionException, IllegalAccessException, InvocationTargetException {PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass());Method methodSetX = pd.getWriteMethod();methodSetX.invoke(pt1, value);}private static Object getProperty(Object pt1, String propertyName) throws IntrospectionException, IllegalAccessException, InvocationTargetException {PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass ()); Method MethodGetX = PD.GetReadMethod (); MethodGetX.Invoke (pt1);}}Operasi introspektif yang kompleks di JavaBeans
Gunakan metode melintasi semua properti Beaninfo untuk menemukan dan mengatur properti X dari objek titik refek. Dalam program ini, perlakukan kelas sebagai Javabean, itu berarti memanggil metode introspector.getbeanInfo, dan objek Beaninfo yang dihasilkan merangkum informasi hasil memperlakukan kelas ini sebagai Javabean.
Operasi introspektif yang kompleks:
Paket usstc.lichunchun.bean; impor java.beans.beaninfo; impor java.beans.introspectionexception; impor java.beans.intospectionexception; impor java.beansceppector; impor java. java.lang.reflect.method; kelas publik introspectortest {public static void main (string [] args) melempar pengecualian {reflectpoint pt1 = new reflectpoint (3, 5); string propertyname = "x"; // "x"-> "x"-"getx"-> Methodx-> objek retval = "x"-"getx"-> Methodx-> objek retval = "X"-"getx"-> Methodx-> objek retval = "x"-getx "-> Methodx-> objek retval =" X "-getx"-> METODEGX-> objek retval = "X"-Getx "-METODOX-> objek retval =" getPOPERT (GETX " propertyName);System.out.println(retVal);Object value = 7;setProperty(pt1, propertyName, value);System.out.println(pt1.getX());}private static void setProperty(Object pt1, String propertyName, Object value) throws IntrospectionException, IllegalAccessException, InvocationTargetException {PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass());Method methodSetX = pd.getWriteMethod();methodSetX.invoke(pt1, value);}private static Object getProperty(Object pt1, String propertyName) throws IntrospectionException, IllegalAccessException, InvocationTargetException {/* PropertyDescriptor PD = New PropertyDescriptor (PropertiDyName, pt1.getClass ()); Metode metodegetx = pd.getreadmethod (); methodgetx.invoke (pt1); */BeanInfo beaninfo = introspector.getBeanInfo (pt1.getClass ()); propertiDescriptor [] pds = beaninfo.getPropertyDescriptors (); objek retval = null; for (propertyDcriptor pd: pds) {if (pd.getnx = null; for (propertyDcriptor pd: pds) {if (pd.getn (pd.get. PD.GetReadMethod (); retval = MethodGetX.invoke (pt1); break;}} return retval;}}}Memanipulasi JavaBeans menggunakan Toolkit Beanutils
Berdasarkan contoh introspeksi sebelumnya, gunakan kelas Beanutils untuk mendapatkan properti set asli terlebih dahulu, dan kemudian mengaturnya ke nilai baru. Hasilnya dikembalikan ketika atribut GET adalah string. Ketika atribut yang ditetapkan, ia dapat menerima semua jenis objek, dan biasanya string digunakan.
Gunakan kelas Propertyutils untuk mendapatkan properti set asli terlebih dahulu, dan kemudian atur ke nilai baru. Hasilnya dikembalikan ketika atribut GET adalah jenis asli dari atribut, dan ketika atribut yang ditetapkan hanyalah jenis asli dari atribut.
Catatan: Sebelum menggunakan dua kelas ini, Anda perlu mengimpor dua paket toples commons-beanutils.jar dan commons-gogging -.1.jar di folder lib proyek gerhana, dan addtobuildpath.
Contoh kode:
Paket usstc.lichunchun.bean; impor java.beans.beaninfo; impor java.beans.introspectionexception; impor java.beans.intospectionexception; impor java.beansceppector; impor java. java.lang.reflect.method; impor org.apache.commons.beanutils.beanutils; impor org.apache.commons.beanutils.propertyutils; Public class introspectortest {public static void Main (string [] args) Lemparan pengecualian {clterspoint PT1 = public static Main (string [] args) Lemparan Pengecuali "x"; // "x"-> "x"-> "getx"-> methodx-> objek retval = getProperty (pt1, propertyname); System.out.println (retval); nilai objek = 7; setProperty (pt1, propertieName, value); System.out.println (beanutil (pt1, paMetyname, value); System.out.println (beanutil. "x"). getClass (). getName ()); // string beanutils.setproperty (pt1, "x", "9"); System.out.println (pt1.getx ());/* peta = {name: "zxx", usia: 18}; // fitur baru java7) (name7: "zxx", usia: 18}; // fitur baru dari java7) "" lean (zxx, */Beanutils.setproperty (pt1, "ulang tahun. "x"). getClass (). getName ()); // Integer/* Perbedaan antara beanutil dan properti: beanutils mengoperasikan javabeans dalam bentuk string, juga dapat mengoperasikan kelas peta, dan javabean dan peta dapat dikonversi satu sama lain (jelaskan, populasi) properti property yang beroperasi dengan jenis data dari javabean (JAVABEAD, PROADIED (POPULASI) OPERAID DATA DATA DATA DATA DATA DATA DAPTICE, String PropertiDyName, Nilai Objek) Melempar IntrospectionException, IllegalAccessException, InvocateTargetException {PropertyDescriptor PD = Properti New PropertyDescriptor (PropertiDyName, pt1.getClass ()); metode MethodSetx = PD.GetWriteMethod (); methodsetx.invoke (pt1, value);} objek statis pribadi getProperty (objek pt1, string propertyname) melempar introspectionException, ilegalAccessException, InvocationTargetException {/* PropertiesDescriptor pD = new PropertyDescriptor (properti, pt1.get () () () () (); Metode metodegetx = pd.getreadmethod (); methodgetx.invoke (pt1); */BeanInfo beaninfo = introspector.getBeanInfo (pt1.getClass ()); propertiDescriptor [] pds = beaninfo.getPropertyDescriptors (); objek retval = null; for (propertyDcriptor pd: pds) {if (pd.getnx = null; for (propertyDcriptor pd: pds) {if (pd.getn (pd.get. PD.GetReadMethod (); retval = MethodGetX.invoke (pt1); break;}} return retval;}}}Meringkaskan
Di atas adalah semua tentang analisis contoh introspektif Java, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!