El número de contornos en la imagen, el tamaño del vector representa el número de puntos en el contorno. Entender a los javabeans
El introspector de palabras en inglés correspondiente es Introsppector, que se usa principalmente para operar Javabeans. Javabean es una clase especial de Java, y algunos métodos cumplen con ciertas reglas de nombres. Si algunos métodos en una clase de Java cumplen con ciertas reglas de nombres, pueden usarse como Javabeans.
Javabean es una clase especial de Java, utilizada principalmente para aprobar información de datos. Los métodos en esta clase de Java se utilizan principalmente para acceder a campos privados, y el nombre del método cumple con ciertas reglas de nomenclatura.
Si desea pasar múltiples información entre dos módulos, puede encapsular esta información en un Javabean, que generalmente se llama ValueObject (VO para abreviar). Esta información se almacena en la clase utilizando campos privados. Si se leen o establecen los valores de estos campos, deben acceder a ellos a través de algunos métodos correspondientes. ¿Cuáles crees que los nombres de estos métodos son buenos? Las propiedades de Javabean se determinan en función de los métodos de Setter y Getter, en lugar de basados en las variables de los miembros. Si el método se llama SETID, significa establecer ID en chino. En cuanto a en qué variable la almacena, ¿funcionará? Si el método se llama getID, significa obtener ID en chino. En cuanto a de qué variable la toma, ¿será útil? Elimine el prefijo SET y la parte restante es el nombre del atributo. Si la segunda letra de la parte restante es minúsculas, cambie la primera letra de la parte restante a una pequeña.
Por ejemplo:
El nombre del atributo de setid () -> id
Nombre del atributo de islast () -> último
¿Cuál es el nombre del atributo de SETCPU? -> CPU
¿Cuál es el nombre del atributo de los atuendos? -> UPS
En resumen, cuando se usa una clase como Javabean, las propiedades del Javabean se infieren en función del nombre del método, y no puede ver las variables de los miembros dentro de la clase Java en absoluto.
Una clase que se ajusta a las características de Javabeans puede usarse como una clase normal, ¡pero usarla como Javabean definitivamente traerá algunos beneficios adicionales antes de que podamos entender y aplicar Javabeans! Los beneficios son los siguientes:
En el desarrollo de Javaee, a menudo se usan Javabeans. Muchos entornos requieren operaciones en modo Javabean. Si otros usan y requieren esto, ¡entonces no tiene otra opción!
JDK proporciona algunas API para operar Javabeans, y este conjunto de API se llama introspección. Si desea acceder a Private X por usted mismo a través del método GETX, cómo hacerlo es difícil, ¿verdad? El uso de la introspección para operar Javabeans es más conveniente que usar clases ordinarias.
Introspección simple de Javabean
La clase java.beans.propertyDescriptor se usa principalmente para obtener una propiedad de Javabean en un conjunto de propiedades de objetos de clase determinados, y luego llame a los métodos getReadMethod () y getWriteMethod () para obtener los métodos Cepting Get y SET SET correspondientes.
Ejemplo de código:
Clase de dominio:
[CPP] ViewPlaincopy
intmain ()
paquete usstc.lichunchun.bean; import java.util.date; public class Reflectpoint {private date birthday = new date (); private int x; public int y; public string str1 = "ball"; public string str2 = "Basketball"; public String str3 = "itcast"; público reflejado (int x, int y) {super (); this.x = x; this.y = y@ograde intshcode (intshed) {final int prime = 31; int result = 1; resultado = prime * resultado + x; resultado = prime * resultado + y; return resultado;}@anular public boolean iguales (object obj) {if (this == obj) return true; if (obj == NULL) return False; if (getClass ()! = obj.getClass () return FALSE; FINAL OTRO = (reflexion) obj) objs; if (getClass ()! = obj.getClass () return FALSE; FINAL OTRO = (reflexion) OBJ) falso; if (y! = Other.y) return false; return true;}@anular public string toString () {return str1 + ":" + str2 + ":" + str3;} public int getx () {return x;} public void setX (int x) {this.x = x;} int gety () {return y;} public void setx (int y) getBirthday () {regreso de cumpleaños;} public void setBirthday (cumpleaños de fecha) {this.birthday = cumpleaños;}}Operación de introspección simple:
paquete usstc.lichunchun.bean; import java.beans.beansinfo; import java.beans.introspectionException; import java.beans.introspectionException; import java.beans.introSpector; importación java.beans.propertyDescriptor; import java.lang.reflect.invcocationtargetException; import java.lang.reflect.method; public class IntraSpectortest {public static void main (string [] args) lanza excepción {reflejoPoint pt1 = new RefletPoint (3, 5); String Propertyname = "x"; // "x"-> "x"-> "getx"-> métodogetX-> getProperty (Pt1, propiedad); 7; setProperty (PT1, PropertyName, value); System.out.println (pt1.getx ());} private static void setProperty (objeto pt1, string propertyyname, valor de objeto) lanza introspectionException, ilegalAccessException, invocationTargetException {PropertyDesscriptor pd = New Descriptor (Desceptor de propiedades (New Descriptor, ILEGALACE, Invocation. pt1.getClass ()); método métodosetx = pd.getWriteMethod (); MethodSetX.Invoke (PT1, Valor);} Objeto estático privado GetProperty (Object Pt1, String PropertyName) lanza IntrospectionException, IlegalAccessException, InvocategetException {PropertyDescriptor PD = New PropertyDescriptor (Recriptor de propiedad (IllegalAccessEcception, invocación de invocación {PropertyDescriptor Pd = New PropertyDescriptor (Recriptor (NewScriptyer,,, ILEGALACCECECIONES, INVOCESO, INVOCESO. pt1.getClass ()); método métodogetx = pd.getReadMethod (); MethodgetX.Invoke (PT1);}}Operaciones introspectivas complejas en Javabeans
Use el método para atravesar todas las propiedades de BeanInfo para encontrar y establecer las propiedades X de un objeto Refectpoint. En el programa, trate una clase como un Javabean, significa llamar al método Introspector.getBeanInfo, y el objeto BeanInfo resultante encapsula la información de resultados de tratar esta clase como Javabean.
Operación introspectiva compleja:
paquete usstc.lichunchun.bean; import java.beans.beansinfo; import java.beans.introspectionException; import java.beans.introspectionException; import java.beans.introSpector; importación java.beans.propertyDescriptor; import java.lang.reflect.invcocationtargetException; import java.lang.reflect.method; public class IntraSpectortest {public static void main (String [] args) lanza excepción {reflejoPoint pt1 = new RefletPoint (3, 5); String Propertyname = "x"; // "x"-> "x"-> "getx"-> métodogetX-> objeto retval = getPreperty (pt1,,, Propertyname); System.out.println (retval); Object Value = 7; SetProperty (PT1, PropertyName, Value); System.out.println (pt1.getx ());} private static void setProperty (object Pt1, string Property, value de objeto) tira introspección áctax. = nuevo PropertyDescriptor (Propertyname, pt1.getClass ()); método métodeStetX = pd.getwriteMethod (); métodSetX.invoke (pt1, valor);} objeto estático privado getProperty (objeto pt1, string Propertyyname) Lanza introspectionException, ilegalAccessException, invocatete de invocación de invocación de invocación {/* propiedad de la propiedad PROPERTYNAME) PropertyDescriptor (Propertyname, pt1.getClass ()); Método métodogetx = pd.getReadMethod (); MethodgetX.Invoke (PT1); */Beaninfo beanInfo = introspector.getBeanInfo (pt1.getClass ()); PropertyDescriptor [] pds = beanInfo.getPropertyDescriptors (); Object RetVal = Null; for (PropertyDescriptor Pd: PDS) {if (PD.GetName (). Equals (PropertyName)) {Method Method pd.getReadMethod (); retval = MethodgetX.Invoke (pt1); break;}} return retval;}}}Manipulación de javabeans usando el kit de herramientas de beanutils
Según el ejemplo de introspección anterior, use la clase BeanUtils para obtener la propiedad de establecimiento original primero, y luego establecerla en un nuevo valor. El resultado regresó cuando el atributo GET es una cadena. Cuando el atributo establecido, puede aceptar cualquier tipo de objetos, y generalmente se usan cadenas.
Use la clase PropertyUtils para obtener la propiedad de establecimiento original primero, y luego configúrela en un nuevo valor. El resultado regresó cuando el atributo GET es el tipo original del atributo, y cuando el atributo establecido es solo el tipo original del atributo.
Nota: Antes de usar estas dos clases, debe importar los dos paquetes JAR Commons-Beanutils.Jar y Commons-logging-1.1.Jar en la carpeta lib del proyecto Eclipse y AddTobuildPath.
Ejemplo de código:
paquete usstc.lichunchun.bean; import java.beans.beansinfo; import java.beans.introspectionException; import java.beans.introspectionException; import java.beans.introSpector; importación java.beans.propertyDescriptor; import java.lang.reflect.invcocationtargetException; import java.lang.reflect.method; import org.apache.commons.beanutils.beanutils; import org.apache.commons.beanutils.propertyutils; public class intraSpectortest {public static void main (string [] args) Exception {reflejado pt1 = new refleatpoin "x"; // "x"-> "x"-> "getx"-> métodogetx-> objeto retval = getProperty (PT1, PropertyName); System.out.println (retval); Object Value = 7; SetProperty (PT1, PropertyRy, Value); System.Println (BeanUtils.getProperty (PT1,,, PT1, "x"). getClass (). getName ()); // string beanUtils.setProperty (pt1, "x", "9"); system.out.println (pt1.getx ());/* map = {name: "zxx", edad: 18}; // Las nuevas características de java7 beanutils.setproperty (map: "name," ",", ",", ",", ",", ",", ",", "; */Beanutils.setProperty (PT1, "cumpleaños.time", "111"); // admite atributos cadena de system.out.println (beanutils.getProperty (PT1, "cumpleaños.time")); PropertyUtils.setProperty (PT1, "X", 23); System.Println (PropertyUtils.getProperty (PT1,, PT1, "X"). PT1, String PropertyName, valor de objeto) arroja introspectionException, ilegalAccessException, invocationTargetException {PropertyDescriptor Pd = new PropertyDescriptor (PropertyName, pt1.getClass ()); Method MethodSetX = PD.getWriteMethod (); MethodSetX.Invoke (PT1, Value);} Objeto estático privado GetProperty (Object Pt1, String PropertyName) lanza IntrospectionException, IlegalAccessException, InvocationTargetException {/* PropertyDescriptor PD = New PropertyDescriptor (Propertyyname, pt1.getclasss ()); Método métodogetx = pd.getReadMethod (); MethodgetX.Invoke (PT1); */Beaninfo beanInfo = introspector.getBeanInfo (pt1.getClass ()); PropertyDescriptor [] pds = beanInfo.getPropertyDescriptors (); Object RetVal = Null; for (PropertyDescriptor Pd: PDS) {if (PD.GetName (). Equals (PropertyName)) {Method Method pd.getReadMethod (); retval = MethodgetX.Invoke (pt1); break;}} return retval;}}}Resumir
Lo anterior se trata del análisis de instancias introspectivas de Java, y espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!