O número de contornos na imagem, o tamanho do vetor representa o número de pontos no contorno. Entenda Javabeans
O introspetor de palavras em inglês correspondente é o introspetor, que é usado principalmente para operar Javabeans. Javabean é uma classe Java especial e alguns métodos atendem a certas regras de nomeação. Se alguns métodos em uma classe Java cumprirem certas regras de nomeação, eles podem ser usados como Javabeans.
Javabean é uma classe Java especial, usada principalmente para aprovar informações de dados. Os métodos nesta classe Java são usados principalmente para acessar campos privados, e o nome do método está em conformidade com certas regras de nomeação.
Se você deseja passar várias informações entre dois módulos, pode encapsular essas informações em um Javabean, que geralmente é chamado de ValueObject (VO para abreviação). Esta informação é armazenada na classe usando campos privados. Se os valores desses campos forem lidos ou definidos, eles precisam ser acessados através de alguns métodos correspondentes. O que você acha que os nomes desses métodos são bons? As propriedades do Javabean são determinadas com base nos métodos Setter e Getter nele, em vez de baseados nas variáveis do membro. Se o método for chamado SetID, significa definir ID em chinês. Quanto a qual variável você a armazena, funcionará? Se o método for chamado Getid, significa obter identificação em chinês. Quanto a qual variável você retira, será útil? Remova o prefixo definido e a parte restante é o nome do atributo. Se a segunda letra da parte restante for minúscula, altere a primeira letra da parte restante para uma pequena.
Por exemplo:
O nome do atributo de setId () -> id
Nome do atributo de Islast () -> Last
Qual é o nome do atributo do setcpu? -> CPU
Qual é o nome do atributo de Getups? -> UPS
Em suma, quando uma classe é usada como javabeu, as propriedades do Javabean são inferidas com base no nome do método e não pode ver as variáveis do membro dentro da classe Java.
Uma classe que está em conformidade com as características dos Javabeans pode ser usada como uma classe normal, mas usá -la como Javabean definitivamente trará alguns benefícios adicionais antes que possamos entender e aplicar Javabeans! Os benefícios são os seguintes:
No desenvolvimento de Javaee, os Javabeans são frequentemente usados. Muitos ambientes requerem operações no modo Javabean. Se outros usam e exigem isso, você não tem escolha!
O JDK fornece algumas APIs para a operação de Javabeans, e esse conjunto de APIs é chamado de introspecção. Se você deseja acessar o X Private X sozinho através do método getX, como fazê -lo é difícil, certo? O uso da introspecção para operar Javabeans é mais conveniente do que usar classes comuns.
Introspecção simples de Javabean
A classe Java.BeanS.PropertyDescriptor é usada principalmente para obter uma propriedade Javabean em um determinado conjunto de propriedades de objeto de classe e, em seguida, ligue para os métodos getReadMethod () e getWriteMethod () para obter os métodos Get e Set correspondentes.
Exemplo de código:
Classe de domínio:
[CPP] ViewPlainCopy
intmain ()
pacote usstc.lichunchun.bean; importar java.util.date; public classe refletePoint {private date aniversário = new Date (); private int x; public int y; public string str1 = "ball"; public string str2 = "basquete"; public string str3 = "itcast"; public (int x, int y) {(); {final int prime = 31; int resultado = 1; resultado = prime * resultado + x; resultado = prime * resultado + y; resultado de retorno;}@substituir public boolean equals (objeto obj) {if (this == obj) retornar true; if (obj) refletir) RELLEFLELTING OUTROUN; false; if (y! = outros.y) retornar false; retornar true;}@substituir public string tostring () {return str1 + ":" + str2 + ":" + str3;} public int getX () {return x;} public void setx (x) {this.x = x;} public Intest () {{ getBirthday () {retornar aniversário;} public void setbirthday (data de aniversário) {this.birthday = aniversário;}}Operação simples de introspecção:
pacote usstc.lichunchun.bean; importar java.beans.beaninfo; importar java.beans.introspecçãoException; importar java.beans.introspecçãoException; import java.beans.introspector; import java.bean.propertyDescriptor; java.lang.reflect.method; public class IntrospectorTest {public static void main (string [] args) lança exceção {refletepoint pt1 = new refletePoint (3, 5); string propriedadeName = "x"; // "x"-> "x"-> "getX"-> metodgetX-> getn (pt (pt (pt "->"-> ""); PropertyName, Value); System.out.println (pt1.getx ());} Void estático privado SetProperty (Object Pt1, String PropertyName, Object Value) lança introspecçãoException, ilegalAcceSceptException, InvocationTargeTexception {PropertyScRortor PDSTSST = New PropertyDesCriptRor (Namename,, pt1, pt1, pt1, pt1, pt1, pt1sTr (propriedaden); pd.getWriteMethod (); MethodSetx.inVoke (Pt1, valor);} Objeto estático privado GetProperty (objeto PT1, String PropertyName) lança introspecçãoException, ilegalaccessException, invocationTargeTexception {PropertyDescripTer Pd = New PropertyDescriptor (PropertyName, ptName, ptname, pt1.gk.getCetCeT.Percation. pd.getReadMethod (); MethodGetx.invoke (pt1);}}Operações introspectivas complexas em Javabeans
Use o método de percorrer todas as propriedades do Beaninfo para encontrar e definir as propriedades X de um objeto RefectPoint. No programa, trate uma classe como um Javabean, significa chamar o método Introspector.getBeanInfo, e o objeto Beaninfo resultante encapsula as informações de resultado do tratamento dessa classe como Javabean.
Operação introspectiva complexa:
pacote usstc.lichunchun.bean; importar java.beans.beaninfo; importar java.beans.introspecçãoException; importar java.beans.introspecçãoException; import java.beans.introspector; import java.bean.propertyDescriptor; java.lang.reflect.method; classe pública introspectorTest {public static void main (string [] args) lança exceção {refletepoint pt1 = new refletePoint (3, 5); string propriedadeName = "x"; // "x"-> "x"-> "getX"-> métodgetx-> objeto PropertyName); System.out.println (retVal); Valor do objeto = 7; setProperty (Pt1, PropertyName, Value); System.out.println (pt1.getx ());} estático privado ° Sentroperty (object PT1, String PropertyName, objeto) PropertyDescriptor (PropertyName, Pt1.getClass ()); Method MethodSetx = pd.getWriteMethod (); MethodSetx.inVoke (Pt1, Value);} Objeto estático privado GetProperty (Object PT1, String PropertyName) lança introspecção, Exception, UllAcalAccesceScepty, ConvocationTargETET1, StringName) lança introspecção*, BreatEdEdScentExceMcetTeteTeTeTeTeT1, Stringname) zagueiro*, BreatEdEdSceptMorTeTeTeTeTeTeT1, String (StringName) ThrowSception* PropertyDescriptor (PropertyName, pt1.getClass ()); Método MethodGetx = Pd.getReadMethod (); MethodGetx.invoke (PT1); */Beaninfo beaninfo = introspector.getBeanInfo (pt1.getClass ()); PropertyDescriptor [] pds = beaninfo.getPropertyDescriptores (); MethodetVal = NULL; para (PropertyDescript PD: PDS) {if (PD.Get.getMame (). pd.getReadMethod (); retVal = MethodGetx.invoke (pt1); quebra;}} retornar retVal;}}}Manipulando Javabeans usando o kit de ferramentas Beanutils
Com base no exemplo anterior de introspecção, use a classe Beanutils para obter primeiro a propriedade Set original e, em seguida, defina -a como um novo valor. O resultado retornou quando o atributo get é uma string. Quando o atributo definido, ele pode aceitar qualquer tipo de objetos e geralmente as strings são usadas.
Use a classe PropertyUtils para obter a propriedade Set original primeiro e, em seguida, defina -a como um novo valor. O resultado retornou quando o atributo get é o tipo original do atributo e quando o atributo definido é apenas o tipo original do atributo.
NOTA: Antes de usar essas duas classes, você precisa importar os dois pacotes de jar comns-beanutils.jar e commons-logging-1.1.jar na pasta Lib do projeto Eclipse e AddTobuildPath.
Exemplo de código:
pacote usstc.lichunchun.bean; importar java.beans.beaninfo; importar java.beans.introspecçãoException; importar java.beans.introspecçãoException; import java.beans.introspector; import java.bean.propertyDescriptor; java.lang.reflect.method; importar org.apache.commons.beanutils.beanutils; importar org.apache.commons.beanutils.propertyutils; public class IntrospectSepestest {public static void main (string [] args)) "x"; // "x"-> "x"-> "getx"-> methetGetx-> objeto retval = getProperty (pt1, propriedadeName); system.out.println (retval); value de objeto = 7; setProperty (pt1, propriedadeName, value); system.out.println (bEAnTils. "x"). getClass (). getName ()); // string beanutils.setProperty (pt1, "x", "9"); system.out.println (pt1.getx ());/* mapa mapa = {name: "zxx", idade: 18}; // os novos recursos de java7 */Beanutils.setProperty (pt1, "aniversário.time", "111"); // atributo de atributo system.out.println (beanutils.getProperty (pt1, "aniversário.time"); imobiliário (pt1, 23); "x").getClass().getName());//Integer /* Difference between BeanUtils and PropertyUtils: BeanUtils operates JavaBeans in string form, can also operate Map classes, and JavaBeans and Map can be converted to each other (describe, populate) PropertyUtils operates with the data type of the JavaBean property itself*/}private static void setProperty(Object pt1, String PropertyName, Object Value) lança introspecçãoException, ilegalAccessException, InvocationTargeTexception {PropertyDescriptor PD = new PropertyDescriptor (PropertyName, Pt1.getClass ()); Method MethodSetx = Pd.getWritemethod (); MethodSetx.invoke (PT1, Valor);} Objeto estático privado GetProperty (objeto PT1, String PropertyName) lança introspecçãoException, ilegalAccessException, InvocationTargeTexception {/* PropertyDescriptor Pd = New PropertyDescriptor (PropertyName, pt1.getClass (); Método MethodGetx = Pd.getReadMethod (); MethodGetx.invoke (PT1); */Beaninfo beaninfo = introspector.getBeanInfo (pt1.getClass ()); PropertyDescriptor [] pds = beaninfo.getPropertyDescriptores (); MethodetVal = NULL; para (PropertyDescript PD: PDS) {if (PD.Get.getMame (). pd.getReadMethod (); retVal = MethodGetx.invoke (pt1); quebra;}} retornar retVal;}}}Resumir
O exposto acima é sobre a análise de instâncias introspectivas de Java, e espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!