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.
No hay JSP EL, JSP usa SpEL. SpEL se adapta a la tecnología que lo está utilizando.