Saturday, November 14, 2009

Spring 3: Spring Expression Language (SpEL)


En la versión 3 de Spring podemos encontrar una nueva característica y es el SpEL (Spring Expression Language). Es una nueva forma para inyectar valores a las propiedades de los beans.

Por ejemplo, todo hijo hereda el apellido del padre:














Al ejecutar el siguiente codigo java:


ApplicationContext appContext =
new ClassPathXmlApplicationContext("classpath:spring3-config.xml");
Persona padre = (Persona) appContext.getBean("padre");
Persona hijo = (Persona) appContext.getBean("hijo");
System.out.println("Apellido del padre = " + padre.getApellido());
System.out.println("Apellido del hijo = " + hijo.getApellido());

El resultado es el siguiente:


Apellido del padre = Lara
Apellido del hijo = Lara

Spring evalúa la expresión "#{padre.apellido}" y la traduce a una llamada el método "getApellido" del bean "padre". El resultado es inyectado a la propiedad "apellido" del bean "hijo". Esta nueva característica del Spring 3 es muy interesante ya que no solo permite acceder a propiedades de otros beans, también llamar metodos de otros beans, obtener valores de propiedades del sistema y hasta llamar métodos estáticos.

Veamos algunos ejemplos:


  • Acceder a propiedades del sistema: #{ systemProperties['valor.systema]}.
  • Llamar métodos estáticos: #{ T(java.lang.Math).random() }.
  • Acceder a elementos de un arreglo: #{ arreglo[1] }.
  • Acceder a elementos de un mapa: #{ mapa['key'] }.
  • Llamar a métodos (con todo y argumentos): #{ 'cadena'.substring(2, 3) }.
  • Operaciones aritméticas: #{ (2 + 2) * 5 }
  • Crear objetos: #{ new String('Hola') }.

En fin, hay muchas otras cosas mas que se pueden hacer con esta nueva característica que viene con Spring 3

Pueden leer mas en la documentación de referencia aquí.