RECORRER UN JAVA BEAN

Posted: martes, 26 de junio de 2012 by Skuarch in Etiquetas: , , ,
1


En ocaciones se requiere de recorrer un bean dinamicamente, en esta entrada explico como se hace usando unas clases de java

java.beans.BeanInfo
Con esta clase podemos manipular el comportamiento del bean, esta clase define métodos que devuelven descriptores para cada propiedad, método o evento que se quiere exponer.

java.beans.Introspector
Esta clase descubre los metodos del bean usando reflexion

Ejemplo

public class Test {

    public test() {

        MyBean mybean = new MyBean();
        mybean.setAlgo("prueba");
     
        Method m = null;

        try {

            BeanInfo beanInfo = Introspector.getBeanInfo(mybean.getClass());

            for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {

                m = pd.getReadMethod();
                System.out.println("property: " + pd.getName() + " value: " + m.invoke(mybean, null));               

            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    } // end test
} // end class

Como te puedes dar cuenta la variable "m" se obtiene de pd (PropertyDescriptor) y es un metodo que despues invocamos con invoke, se le pasan como argumentos el bean y los argumentos propios del metodo en caso de que tuviera

1 comentarios:

  1. Iago says:

    Hola

    Este ejemplo me ha abierto un mundo nuevo de posibilidades. Pero en mi desarrollo veo algo que me ha chocado bastante y no se como resolver:

    Mi Bean es tal que así...

    private BigDecimal concepto;
    private String litConcepto;
    private String importe1;
    private String importe2;
    private String importe3;
    private String importe4;
    private String importe5;
    private String importe6;
    private String importe7;
    private String importe8;
    private String importe9;
    private String importe10;

    Y cuando listo el contenido con tu código, me ordena de la siguiente manera:

    Propiedad: class Valor: class es.aeat.jmic.ctri.imp.modelos.Linea
    Propiedad: concepto Valor: 0
    Propiedad: importe1 Valor:
    Propiedad: importe10 Valor:
    Propiedad: importe2 Valor:
    Propiedad: importe3 Valor:
    Propiedad: importe4 Valor:
    Propiedad: importe5 Valor:
    Propiedad: importe6 Valor:
    Propiedad: importe7 Valor:
    Propiedad: importe8 Valor:
    Propiedad: importe9 Valor:
    Propiedad: litConcepto Valor:

    ¿Hay alguna manera de respetar el orden, definido del bean?

    Saludos y gracias