Die Anzahl der Konturen im Bild, die Größe des Vektors, repräsentiert die Anzahl der Punkte auf der Kontur. JavaBeans verstehen
Das entsprechende englische Wort Introspector ist Introspector, der hauptsächlich zum Betrieb von JavaBeäen verwendet wird. JavaBean ist eine spezielle Java -Klasse, und einige Methoden erfüllen bestimmte Namensregeln. Wenn einige Methoden in einer Java -Klasse bestimmte Namensregeln erfüllen, können sie als JavaBeans verwendet werden.
Javabean ist eine spezielle Java -Klasse, die hauptsächlich zum Übergeben von Dateninformationen verwendet wird. Die Methoden in dieser Java -Klasse werden hauptsächlich zum Zugriff auf private Felder verwendet, und der Methodenname entspricht bestimmten Namensregeln.
Wenn Sie mehrere Informationen zwischen zwei Modulen übergeben möchten, können Sie diese Informationen in ein JavaBean zusammenfassen, das normalerweise als ValueObject (kurz VO) bezeichnet wird. Diese Informationen werden in der Klasse mit privaten Feldern gespeichert. Wenn die Werte dieser Felder gelesen oder festgelegt werden, müssen sie mit einigen entsprechenden Methoden zugegriffen werden. Was denkst du, sind die Namen dieser Methoden gut? Die Eigenschaften von Javabäen werden basierend auf den darin enthaltenen Setter- und Getter -Methoden ermittelt und nicht auf den darin enthaltenen Elementvariablen. Wenn die Methode als SetID bezeichnet wird, bedeutet dies, ID auf Chinesisch festzulegen. Funktioniert es, auf welche Variable Sie es speichern, dann funktioniert es? Wenn die Methode als GetID bezeichnet wird, bedeutet dies, ID auf Chinesisch zu erhalten. Ist es angemessen? Entfernen Sie das festgelegte Präfix und der verbleibende Teil ist der Attributname. Wenn der zweite Buchstabe des verbleibenden Teils in Kleinbuchstaben ist, ändern Sie den ersten Buchstaben des verbleibenden Teils in einen kleinen.
Zum Beispiel:
Der Attributname von setId () -> id
ISLAST ()s Attributname -> zuletzt
Wie lautet der Attributname des SETCPU? -> CPU
Wie lautet der Attributname von Getups? -> ups
Kurz gesagt, wenn eine Klasse als Javabäer verwendet wird, werden die Eigenschaften der Javabäer basierend auf dem Methodennamen abgeleitet und können die Mitgliedsvariablen in der Java -Klasse überhaupt nicht sehen.
Eine Klasse, die den Eigenschaften von JavaBeans entspricht, kann als normale Klasse verwendet werden. Wenn wir sie jedoch als JavaBean verwenden, werden sie definitiv einige zusätzliche Vorteile bringen, bevor wir JavaBeans verstehen und anwenden können! Die Vorteile sind wie folgt:
In der Javaee -Entwicklung werden häufig Javabeer verwendet. Viele Umgebungen erfordern Operationen im Javabäermodus. Wenn andere dies verwenden und dies benötigen, haben Sie keine Wahl!
JDK bietet einige APIs für den Betrieb von JavaBeans, und diese APIs wird als Selbstbeobachtung bezeichnet. Wenn Sie über die Getx -Methode selbst auf private X zugreifen möchten, wie ist es schwierig, oder? Die Verwendung von Selbstbeobachtung zum Betrieb von JavaBeans ist bequemer als die Verwendung normaler Klassen.
Einfache Selbstbeobachtung von Javabäen
Die Java.bean.PropertyDescriptor -Klasse wird hauptsächlich verwendet, um eine Javabäe -Eigenschaft in einer bestimmten Klassenobjekteigenschaft zu erhalten, und dann die Methoden von GetReadMethod () und GetWritemethod () aufzurufen, um die entsprechenden Get -and -Set -Methoden zu erhalten.
Codebeispiel:
Domänenklasse:
[CPP] ViewplainCopy
intmain ()
paket ustc.lichunchun.bean; import java.util.date; public class reflectpoint {privat date birthday = new date (); {Final int Prime = 31; int result = 1; result = prime * result + x; result = prime * result + y; return Ergebnis;}@override öffentliche boolean gleich (Objekt obj) {if (this == obj) return true; if (obj == null) return false; if (getclass). 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() {return y;}public void setY(int y) {this.y = y;}public Date GetBirthday () {Return Birthday;} public void setBirthday (Datum Geburtstag) {this.birthday = Geburtstag;}}Einfache Operation der Selbstbeobachtung:
Paket ustc.lichunchun.bean; import Java.beans.beaninfo; Import Java.beans.introspectionException; Import Java.beans.introspectionException; java.lang.reflect.method; public class introspectestest {public static void main (String [] args) löst Ausnahme aus {reflectPoint pt1 = neu reflektierpunkt (3, 5); String PropertyName = "x"; // "x"-> "x"-> "getX"-> methodGetx-> GetProperty (pt1) (pt1, pt1, pt1, pt1, pt1 (pt1) (pt1, pt1, pt1 (pt1) (pt1, pt1, pt1, property, property (pt1 PropertyName, Value); System.out.println (pt1.getX ());} private statische void setProperty (Objekt PT1, String PropertyName, Objektwert) löst introspectivexception, illegalaccessException, InvocationTargetException {PropertyDescriptor pd = New PropertyDescriptor (PropertyName, Pt1.GetClasse (); pd.getwritemethod (); methodeSetX.invoke (pt1, value);} private statische Objekte getProperty (Objekt PT1, String PropertyName) löst intropectionException, illegalAccessexception, invocationTargetException {PropertyDescriptor pd = new PropertyDescriptor (PropertyName, Pt1.GetClass (); pd.getreadMethod (); methodeGetX.invoke (pt1);}}Komplexe introspektive Operationen auf JavaBeans
Verwenden Sie die Methode zum Durchqueren aller Eigenschaften von Beaninfo, um die X -Eigenschaften eines Refectpoint -Objekts zu finden und festzulegen. In dem Programm, eine Klasse als Javabäe behandeln, bedeutet dies, die Methode "Introspector.getBeanInfo" aufzurufen, und das resultierende BeanInfo -Objekt verkauft die Ergebnisinformationen zur Behandlung dieser Klasse als Javabäer.
Komplexe introspektive Operation:
Paket ustc.lichunchun.bean; import Java.beans.beaninfo; Import Java.beans.introspectionException; Import Java.beans.introspectionException; java.lang.reflect.Method;public class IntroSpectorTest {public static void main(String[] args) throws Exception {ReflectPoint pt1 = new ReflectPoint(3, 5);String propertyName = "x";//"x"-->"X"-->"getX"-->MethodGetX--> Object retVal = getProperty(pt1, PropertyName); System.out.println (retval); Objektwert = 7; setProperty (pt1, propertyName, value); PropertyDescriptor (PropertyName, pt1.getClass ()); Methode methodeSetX = pd.getWritemethod (); methodeSetX.invoke (pt1, value);} private statische Objekte GetProperty (Objekt Pt1, String Property) löscht IntrospectiveException, illegalakaccessException, Invocpoctarget {/* PropertyDesDes -NEW -NEW -AccessException, {/* PropertyDescriptor (PropertyName, pt1.getClass ()); Method methodgetX = pd.getreadMethod (); methodgetX.invoke (pt1); */BeanInfo beanInfo = introspector.getBeanInfo (pt1.getClass ()); PropertyDescriptor [] pds = beanInfo.getPropertyDescriptors (); pd.getreadMethod (); retval = methodgetX.invoke (pt1); break;}} retVal retVal;}}}JavaBeans mit dem Beanutils -Toolkit manipulieren
Basierend auf dem vorherigen Beispiel für Selbstbeobachtung verwenden Sie die Beanutils -Klasse, um die ursprüngliche Set -Eigenschaft zuerst zu erhalten, und setzen Sie sie dann auf einen neuen Wert ein. Das Ergebnis wurde zurückgegeben, wenn das GET -Attribut eine Zeichenfolge ist. Bei dem Set -Attribut kann es alle Arten von Objekten akzeptieren und in der Regel werden Zeichenfolgen verwendet.
Verwenden Sie die PropertyUtils -Klasse, um die ursprüngliche Set -Eigenschaft zuerst zu erhalten, und stellen Sie sie dann auf einen neuen Wert ein. Das Ergebnis wird zurückgegeben, wenn das GET -Attribut der ursprüngliche Typ des Attributs ist und wenn das SET -Attribut nur der ursprüngliche Typ des Attributs ist.
HINWEIS: Bevor Sie diese beiden Klassen verwenden, müssen Sie die beiden JAR-Pakete Commons-beanutils.jar und Commons-Logging-1.1.Jar im Lib-Ordner des Eclipse-Projekts und AddtobuildPath importieren.
Codebeispiel:
Paket ustc.lichunchun.bean; import Java.beans.beaninfo; Import Java.beans.introspectionException; Import Java.beans.introspectionException; java.lang.reflect.method; import org.apache.commons.beanutils.beanutils; import org.apache.commons.beanutils.propertyutils; öffentliche Klasse introspectOrtOrtest {public static void Main (String [] args) leuchtet Ausnahme aus {reflektiert pt1 = newpoint (3, 5). "x"; // "x"-> "x"-> "getX"-> methodgetX-> Objekt retval = getProperty (pt1, propertyName); System.out.println (retval); "x"). */Beanutils.setProperty (pt1, "birthday.time", "111"); // Support Attribut Chain System.out.println (Beanutils.getProperty (pt1, "birdelton.time"); "x"). getClass (). getName ()); // Integer/* Unterschied zwischen Beanutils und PropertyUtils: Beanutils betreibt JavaBeans in String -Form, können auch Kartenklassen bedienen, und JavaBeans können zueinander konvertiert werden (beschreiben, propertioniert). PropertyName, Object Value) löst introspectiveException, illegalAccessexception, invocationTargetException {PropertyDescriptor pd = new PropertyDescriptor (PropertyName, pt1.getClass ()) aus; methodSetX.invoke (pt1, value);} private static Object GetProperty (Objekt PT1, String PropertyName) löscht IntrospectiveException, illegalAccessexception, InvocationTargetException {/* PropertyDescriptor pd = new PropertyDescriptor (PropertyName, pt1.getClasse ()); Method methodgetX = pd.getreadMethod (); methodgetX.invoke (pt1); */BeanInfo beanInfo = introspector.getBeanInfo (pt1.getClass ()); PropertyDescriptor [] pds = beanInfo.getPropertyDescriptors (); pd.getreadMethod (); retval = methodgetX.invoke (pt1); break;}} retVal retVal;}}}Zusammenfassen
Im obigen dreht sich alles um die Analyse von Java -introspektiven Fällen, und ich hoffe, dass es für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!