Le nombre de contours dans l'image, la taille du vecteur représente le nombre de points sur le contour. Comprendre Javabeans
L'introspecteur de mots anglais correspondant est introspecteur, qui est principalement utilisé pour exploiter les javabeans. Javabean est une classe Java spéciale et certaines méthodes respectent certaines règles de dénomination. Si certaines méthodes dans une classe Java respectent certaines règles de dénomination, elles peuvent être utilisées comme javabeans.
Javabean est une classe Java spéciale, principalement utilisée pour transmettre des informations sur les données. Les méthodes de cette classe Java sont principalement utilisées pour accéder aux champs privés, et le nom de la méthode est conforme à certaines règles de dénomination.
Si vous souhaitez transmettre plusieurs informations entre deux modules, vous pouvez encapsuler ces informations dans un Javabean, qui est généralement appelé valeur OBJEC (VO pour faire court). Ces informations sont stockées dans la classe à l'aide de champs privés. Si les valeurs de ces champs sont lues ou définies, elles doivent être accessibles via certaines méthodes correspondantes. Que pensez-vous que les noms de ces méthodes sont bons? Les propriétés de Javabean sont déterminées sur la base des méthodes de setter et de Getter, plutôt que sur la base des variables membre. Si la méthode est appelée SETID, cela signifie définir l'ID en chinois. Quant à quelle variable vous le stockez, cela fonctionnera-t-il? Si la méthode s'appelle GETID, cela signifie obtenir une pièce d'identité en chinois. Quant à quelle variable vous le prenez, est-il approprié? Supprimez le préfixe SET et la pièce restante est le nom d'attribut. Si la deuxième lettre de la partie restante est en minuscules, modifiez la première lettre de la partie restante en petite.
Par exemple:
Le nom d'attribut de setID () -> id
Nom d'attribut d'Islast () -> Last
Quel est le nom d'attribut du setCPU? -> CPU
Quel est le nom d'attribut des tenues? -> UPS
En bref, lorsqu'une classe est utilisée comme Javabean, les propriétés de la Javabean sont déduites en fonction du nom de la méthode, et il ne peut pas du tout voir les variables de membre à l'intérieur de la classe Java.
Une classe conforme aux caractéristiques des Javabeans peut être utilisée comme classe normale, mais l'utiliser comme javabean apportera certainement des avantages supplémentaires avant de pouvoir comprendre et appliquer les Javabeans! Les avantages sont les suivants:
Dans le développement de Javaee, les javabeans sont souvent utilisés. De nombreux environnements nécessitent des opérations en mode Javabean. Si d'autres utilisent et nécessitent cela, vous n'avez pas le choix!
JDK fournit quelques API pour faire fonctionner les javabeans, et cet ensemble d'API est appelé introspection. Si vous souhaitez accéder à Private X par vous-même via la méthode Getx, comment le faire est difficile, non? L'utilisation d'introspection pour faire fonctionner les Javabeans est plus pratique que l'utilisation de classes ordinaires.
Introspection simple de Javabean
La classe Java.beans.PropertyDescriptor est principalement utilisée pour obtenir une propriété JavaBean dans un certain ensemble de propriétés d'objets de classe, puis appelez les méthodes getReadMethod () et GetWriteMethod () pour obtenir les méthodes Get and Set correspondantes.
Exemple de code:
Classe de domaine:
[CPP] Viewplaincopy
intmain ()
package usstc.lichunchun.bean; importer java.util.date; public class reflevpoint {private date anniversaire = new Date (); private int x; public int y; public string str1 = "ball"; public string str2 = "basketball"; public string str3 = "itcast"; public réfleppoint (int x, int y) {super (); this.x = x; this.y = y;} @ overnide. {final int prime = 31; int result = 1; result = prime * Result + x; result = prime * result + y; return result;} @ return public booléen equals (objet obj) {if (this == obj) return true; if (obj == null) return false; if (getClass ()! = obj.getclass ()) return false; 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 sey (int y) {this. getBirthday () {return anniversaire;} public void SetBirthday (date d'anniversaire) {this.birthday = anniversaire;}}Fonctionnement d'introspection simple:
package usstc.lichunchun.bean; import java.beans.beaninfo; import java.beans.introSpectionException; import java.beans.intospectionException; import java.beans.introspector; import java.beans.propertydescriptor; import java.lang.reflect.invocationtargexception; java.lang.reflect.method; public class IntrospectOrest {public static void main (String [] args) lève une exception {reflentspoint pt1 = new reflefpoint (3, 5); string propertyName = "x"; // "x" -> "x" -> "getx" -> méthodyGetx -> GetProperty (pt1, property); PropertyName, valeur); System.out.println (pt1.getx ());} private static void setProperty (objet pt1, chaîne PropertyName, valeur objet) lance IntospectionException, illégalaccessException, invocationTargexception {PropertyDescriptor pd = new propertyShedSE pd.getWriteMethod (); méthodeSetx.invoke (pt1, valeur);} objet statique privé getProperty (objet PT1, String PropertyName) lève IntrospectionException, illégalAccessException, invocationTargexception {PropertyDescriptor pd = new PropertyDescriptor (propriété, pt1.getClass (); pd.getReadMethod (); méthodyGetX.invoke (pt1);}}Opérations introspectives complexes sur Javabeans
Utilisez la méthode pour traverser toutes les propriétés de Beaninfo pour trouver et définir les propriétés X d'un objet RefecctPoint. Dans le programme, traitez une classe comme une Javabean, cela signifie appeler la méthode introspector.getBeanInfo, et l'objet Beaninfo résultant résume les informations sur les résultats du traitement de cette classe comme JavaBean.
Fonctionnement introspectif complexe:
package usstc.lichunchun.bean; import java.beans.beaninfo; import java.beans.introSpectionException; import java.beans.intospectionException; import java.beans.introspector; import java.beans.propertydescriptor; import java.lang.reflect.invocationtargexception; java.lang.reflect.method; public class introspecTorTest {public static void main (string [] args) lève exception {reflevpoint pt1 = new Reflectpoint (3, 5); string propertyName = "x"; // "x" -> "x" -> "getx" -> methodgetx -> objet retval = getProperty (pt1, PropertyName); System.out.println (retval); objet Value = 7; setProperty (pt1, propriétéName, valeur); System.out.println (PT1.getx ());} private static void setProperty (objet PT1 PropertyDescriptor (PropertyName, pt1.getClass ()); méthode méthodeSetX = pd.getWriteMethod (); méthodeSetx.invoke (pt1, valeur);} objet statique privé GetProperty (objet PT1 PropertyDescriptor (propriétéName, pt1.getClass ()); Méthode MethodGetX = pd.getReadMethod (); MethodGetX.Invoke (PT1); * / Beaninfo beaninfo = introspector.getBeanInfo (pt1.getClass ()); propriétéDescriptor [] pds = beaninfo.getPropertyDescriptors (); objet retval = null; for (propriétéDescriptor pd: pds) {if (pd.getName (). pd.getReadMethod (); retval = methodgetx.invoke (pt1); break;}} return retval;}}}Manipulation de Javabeans à l'aide de la boîte à outils Beanutils
Sur la base de l'exemple d'introspection précédent, utilisez la classe Beanutils pour obtenir d'abord la propriété SET d'origine, puis définissez-la sur une nouvelle valeur. Le résultat renvoyé lorsque l'attribut get est une chaîne. Lorsque l'attribut SET, il peut accepter tout type d'objets et généralement des chaînes sont utilisées.
Utilisez la classe PropertyUtils pour obtenir d'abord la propriété SET d'origine, puis définissez-la sur une nouvelle valeur. Le résultat renvoyé lorsque l'attribut GET est le type d'origine d'origine de l'attribut et lorsque l'attribut SET n'est que le type d'origine de l'attribut.
Remarque: Avant d'utiliser ces deux classes, vous devez importer les deux packages JAR Commons Beanutils.jar et Commons-Logging-1.1.jar dans le dossier lib du projet Eclipse, et addTobuildPath.
Exemple de code:
package usstc.lichunchun.bean; import java.beans.beaninfo; import java.beans.introSpectionException; import java.beans.intospectionException; import java.beans.introspector; import java.beans.propertydescriptor; import java.lang.reflect.invocationtargexception; java.lang.reflect.method; import org.apache.commons.beanutils.beanutils; import org.apache.commons.beanutils.propertyutils; public class introspecTortest "x"; // "x" -> "x" -> "getx" -> méthodyGetX -> objet retval = getProperty (pt1, propriété); System.out.println (retval); objet Value = 7; setProperty (pt1, propriété (PT1, System.out.Println (beanutils.getProperty (PT1,; "x"). getClass (). getName ()); // string beanutils.setproperty (pt1, "x", "9"); System.out.println (pt1.getx ()); / * map map = {name: "zxx", Âge: 18}; // les nouvelles fonctionnalités de Java7. * / Beanutils.setproperty (pt1, "anniversaire.time", "111"); // support attribut chain system.out.println (beanutils.getproperty (pt1, "anniversaire.time")); propriété.setProperty (pt1, "x", 23); system.out.println (propriété.getProperty (PT1,; "x"). getClass (). getName ()); // entier / * différence entre Beanutils et PropertyUtils: Beanutils exploite les javabeans sous forme de chaîne, peut également exploiter des classes de cartes, et Javabeans et MAP peuvent être converties sous les autres (décrire, populate) Property Static STATICS VOIDE (Type de données de la Javabean Property * /} STATICE VOID VOIDE (Type de données PTPPEC String PropertyName, Valeur d'objet) lève IntrospectionException, illégalAccessException, invocationTargetException {PropertyDescriptor pd = new PropertyDescriptor (PropertyName, pt1.getClass ()); Method MethodSetx = pd.getWriteMethod (); MethodSetX.invoke (pt1, valeur);} objet statique privé GetProperty (objet PT1, String PropertyName) lève IntrospectionException, illégalAccessException, invocationTargetException {/ * PropertyDescriptor pd = new PropertyDescriptor (PropertyName, pt1.getClass ()); Méthode MethodGetX = pd.getReadMethod (); MethodGetX.Invoke (PT1); * / Beaninfo beaninfo = introspector.getBeanInfo (pt1.getClass ()); propriétéDescriptor [] pds = beaninfo.getPropertyDescriptors (); objet retval = null; for (propriétéDescriptor pd: pds) {if (pd.getName (). pd.getReadMethod (); retval = methodgetx.invoke (pt1); break;}} return retval;}}}Résumer
Ce qui précède concerne l'analyse des instances introspectives Java, et j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!