Lenguaje de expresión Spring (SpEL) con @Value: dólar frente a hash ($ frente a #)

Resuelto sjngm asked hace 13 años • 4 respuestas

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?
sjngm avatar Mar 16 '11 15:03 sjngm
Aceptado

${...}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.

skaffman avatar Mar 16 '2011 08:03 skaffman

${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.

XvrCJ avatar Nov 21 '2013 22:11 XvrCJ