Lenguaje de expresión Spring (SpEL) con @Value: dólar frente a hash ($ frente a #)
Estoy un poco confundido respecto a cuándo usarlo ${...}
en comparación con #{...}
. La documentación de Spring solo usa #{...}
, pero hay muchos ejemplos que lo usan ${...}
. Además, cuando comencé con SpEL me dijeron que usara${...}
y funciona bien.
Para aquellos que están confundidos, un ejemplo de cómo lo uso sería
@Component
public class ProxyConfiguration {
@Value("${proxy.host}")
private String host;
@Value("${proxy.port}")
private String port;
:
}
y algún archivo de propiedades:
proxy.host=myproxy.host
proxy.port=8000
Mis preguntas son:
- ¿Cuáles son las diferencias o es lo mismo?
- ¿Una versión está en desuso, por lo que debería usar la otra?
${...}
es la sintaxis del marcador de posición de propiedad. Sólo se puede utilizar para desreferenciar propiedades.
#{...}
es la sintaxis SpEL , que es mucho más capaz y compleja. También puede manejar marcadores de propiedad y mucho más.
Ambos son válidos y ninguno está en desuso.
${expr}
--> Evaluación Inmediata
#{expr}
--> Evaluación Diferida
Evaluación inmediata significa que la expresión se evalúa y el resultado se devuelve tan pronto como se representa la página por primera vez. La evaluación diferida significa que la tecnología que utiliza el lenguaje de expresión puede usar su propia maquinaria para evaluar la expresión en algún momento posterior durante el ciclo de vida de la página, siempre que sea apropiado hacerlo.
Referencia completa aquí
No existe JSP EL, JSP usa SpEL. SpEL se adapta a la tecnología que lo utiliza.