Spring ofrece un lenguaje propio llamado SpEL (Spring Expression Language) que permite construir expresiones complejas evitando tener que limitar la configuración de un sistema a utilizar simples literales estáticos. Se utiliza habitualmente en los ficheros XML donde se definen los beans, y también en conjunción con algunas anotaciones.

Es un lenguaje independiente que puede utilizarse sin necesidad de definir ningún contexto.

SpelExpressionParser

Aunque no es lo habitual, se puede acceder mediante código al lenguaje instanciando directamente el parser de expresiones:

La cadena de texto estático del ejemplo no es sólo una expresión, sino que es un objeto de tipo String, y sobre él se pueden aplicar todas las operaciones habituales que pueden realizarse sobre un objeto de este tipo:

SpEL permite invocar constructores, acceder a propiedades y llamar a métodos. Pero el uso habitual es aplicar una expresión sobre un objeto contextual, llamado root, de forma que sea evaluada sobre él:

El lenguaje utiliza el servicio de conversión de tipos explicado en el capítulo anterior, que puede extenderse para dar soporte a tipos propios, incluyendo las propiedades basadas en alguna clase de colección:

XML

SpEL se utiliza dentro de los ficheros XML de configuración en la forma “#{ <expresión> }“:

Y entre otras muchas opciones, permite por ejemplo acceder directamente a las propiedades del sistema:

O evaluar expresiones más complejas que impliquen invocar al API de Java:

Anotaciones

Las expresiones de SpEL se pueden utilizar con la anotación @Value directamente sobre las propiedades de los bean, o sobre sus setters correspondientes, para establecer valores por defecto:

E incluso sobre los parámetros del constructor:

Aunque es un tema que ya se ha comentado anteriormente, es bueno recordar aquí que Spring necesita las directivas adecuadas en el fichero de configuración para activar el escaneo de paquetes y el procesamiento de anotaciones: