Font Size

SCREEN

Profile

Layout

Direction

Menu Style

Cpanel

Aninki Code

Apache Commons BeanUtils

beanutils.pngLibrería cuya funcionalidad se dirige hacia la capacidad de leer y escribir JavaBeans sin necesidad de conocer el nombre y signatura de sus propiedades o métodos.

+ INFO

BeanUtils - Indice contenidos

 

BeanUtils - Conceptos generales

BeanUtils diferencia entre varios tipos de propiedades dentro de los javabeans:

  • Simple/Scalar: Son propiedades de tipos primitivos (boolean,int) o 
  • Indexed: Propiedades que son listas  (java.util.List o cualquiera de sus implementaciones) ó arrays
  • Nested: Propiedades que son Mapas (java.util.Map ) .
  • Mapped: Una propiedad que a su vez es un javabea
 
DyanBean(Dynamic JavaBeans ): Es un bean creado dinámicamene, BeanUtils define 4 clases para acceder a las propiedades de los beans:
  • BeanUtils
  • BeanUtilsBean
  • PropertyUtils
  • PropertyUtilsBean

 Resumen para su uso:

En resumen, aquí están las reglas para el uso de las clases BeanUtils:

  •  Usar BeanUtils cuando las conversiones por defecto de las propiedades a valores de cadena son aceptables.
  •  Usar PropertyUtils cuando no hay conversiones de propiedad son obligatorios.
  •  Usar BeanUtilsBean cuando las conversiones por defecto de las propiedades a valores de cadena no son aceptablesy desea  proporcionar  rutinas de conversión propias.
  • Usar PropertyUtilsBean cuando no se desea utilizar los métodos estáticos de PropertyUtils

Todo esto tendrá más sentido cuando veamos los ejemplos.

 

BeanUtils - Enlaces de interes

BeanUtils diferencia entre varios tipos de propiedades dentro de los javabeans:

BeanUtils -Descripción del ejemplo

Como vimos en Conceptos Generales, existen varios tipos de propiedades dentro de un Javabean. 

Para cubrir todos los casos , hemos creado :

  • Clase Curso
class Curso {
	   private Integer idCurso;
	   public String titulo;
	   public String aula;
	   public int creditos;
	   public Map asignaturas=new HashMap();
	   public Profesor profesor;
	   public List Colegios;
	   public Titulacion titulaciones[];
.....
}
  • Clase Profesor
 
class Profesor {

	String nombre;
	String apellido;
....
}
    • Clase Colegio
 
public class Colegio {

	private int  idColegio;
	private String nobmreColegio;
....
}
  • Clase Titulación
 
public class Titulacion {
	private int idTitulacion;
	private String nombreTitulacion;
....
}

BeanUtils - Acceso Propiedades

Vamos a utilizar los javaBeans descritos aquí, para demostrar los distintos tipos de acceso.

  • Propiedades Scalar
BeanUtils.getProperty(curso1, "aula")
  • Propiedades Nested-scalar
BeanUtils.getProperty(curso1, "profesor.nombre");
  • Propiedad Mapped
BeanUtils.getProperty(curso1,"asignaturas.1.nombreAsignatura")
BeanUtils.getProperty(curso1, "asignaturas(2).nombreAsignatura")
  • Propiedades indexed
BeanUtils.getProperty(curso1, "titulaciones[0].nombreTitulacion")

BeanUtilsAcceso Propiedades Según tipo

Vamos a utilizar los javaBeans descritos aquí, para demostrar los distintos tipos de acceso.

  • Nested
BeanUtils.getNestedProperty(curso1,"profesor");
  • Propiedad Mapped
BeanUtils.getMappedProperty(curso1,"asignaturas", "1");
  • Propiedades indexed
BeanUtils.getIndexedProperty(curso1,"titulaciones", 1);
BeanUtils.getArrayProperty(curso1,"titulaciones");

BeanUtils - Copia de propiedades de un Bean

Vamos a utilizar los javaBeans descritos aquí, para copiar las propiedades de un javabean a otro.

  • Copia de propiedades
	//Objeto curso cargado de datos previamente
	Curso curso1=lCursos.get(0);
	Curso curso2=new Curso();
		.....
	BeanUtils.copyProperties(curso2, curso1);

Es importante remarcar que si una propiedad del bean curso1 no existe en el bean curso2, no lanzará una excepción, simplemente los ignorará a la hora copiar.

BeanUtils -Escritura en Propiedades

Vamos a utilizar los javaBeans descritos aquí, para demostrar las distintas formas de escribir en las propiedades

  • Propiedades Scalar
BeanUtils.setProperty(curso1, "titulo", "Seo / SEM");
  • Propiedades Nested
BeanUtils.setProperty(curso1, "profesor.nombre", "Marcos ");
  • Propiedad Mapped
BeanUtils.setProperty(curso1, "asignaturas(1).nombreAsignatura", "Chino ");

BeanUtils -Uso DynaBean, DynaClass y DynaProperty

DynaBean, DynaClass y DynaProperty son las clases que nos van a permitir realmente crear beans de forma dinámica.

  • Crear y modificar dinámicamente un bean
Map describedData = BeanUtils.describe(curso1.getProfesor());

//Definimos las propiedades del bean
DynaProperty properties[] = new DynaProperty[] {	
				   
				new DynaProperty("titulo", String.class),
				new DynaProperty("aula", String.class),
				new DynaProperty("creditos", Integer.class),
				new DynaProperty("asignaturas", String.class),
				//profesor y colegio son Dynabeans si las quiero crear dinamicamente.
				new DynaProperty("profesor", DynaBean.class),
				new DynaProperty("Colegios", DynaBean.class)	,
				//Titulación la defino como una clase concreta
				new DynaProperty("titulaciones", Titulacion[].class)
				};

//definomos una clase dinámica basada en las propiedades definidas bean de forma dinamica
DynaClass cursoClass =new BasicDynaClass("Curso", null, properties);

//instaciomos el  un DynaBean.
DynaBean cursoBean = cursoClass.newInstance();

			cursoBean.set("titulo","Presentaciones eficaces");
//Trabajamos con los métodos como si fueran el bean original
			cursoBean.set("titulaciones", new Titulacion[]{new Titulacion()});
			System.out.println(cursoBean.get("titulaciones"));
			
			//añado un metodo DynaBean		
			//las propiedades son añadidas la primera vez las invocamos
			DynaBean Colegios=new LazyDynaBean();
			Colegios.set("idColegio", 1);
			Colegios.set("nobmreColegio","IFES Prueba");