ioc injection framework dependency context bean autowire application annotation spring dependency-injection spring-el

injection - spring framework



Lenguaje de expresión de primavera(SpEL) con @Value: dólar vs. hash($ contra#) (4)

Especificación del lenguaje de expresión • Versión final - 8 de mayo de 2006

Página 2:

Una expresión-eval se forma utilizando las construcciones $ {expr} o # {expr}. Ambos constructos son analizados y evaluados exactamente de la misma manera por el EL, a pesar de que pueden tener diferentes significados en la tecnología que usa el EL.

Estoy un poco confundido sobre cuándo usar ${...} comparación con #{...} . La documentación de Spring solo usa #{...} , pero hay muchos ejemplos que 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 propiedad:

proxy.host=myproxy.host proxy.port=8000

Mis preguntas son:

  • ¿Cuáles son las diferencias o es lo mismo?
  • ¿Está una versión en desuso así que debería usar la otra?

Intenta leer este artículo , que sugiere

"Si se usa el hash, el código se vuelve a calcular cada vez que se incluye ese elemento en una actualización parcial (es decir, cada vez que se procesa). Si usa un dólar, el código solo se calcula cuando la página se carga inicialmente. se ha extendido más allá de solo EL, a SSJS también. Después del hash o dólar, las llaves indican el inicio y el final de su idioma. Esto será importante cuando lleguemos a combinar idiomas más tarde ".


${...} es la sintaxis del marcador de posición de la propiedad. Solo se puede usar para desreferenciar propiedades.

#{...} es la sintaxis de SpEL , que es mucho más capaz y compleja. También puede manejar marcadores de posición de propiedad y mucho más.

Ambos son válidos y ninguno está en desuso.


${expr} -> Evaluación Inmediata

#{expr} -> Evaluación diferida

La evaluación inmediata significa que la expresión se evalúa y el resultado se devuelve tan pronto como la página se procesa 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 hay JSP EL, JSP usa SpEL. SpEL se adapta a la tecnología que lo está utilizando.