web-dev-qa-db-fra.com

Spring Expression Language (SpEL) avec @Value: dollar vs. hash ($ vs. #)

Je suis un peu confus quant au moment d'utiliser ${...} par rapport à #{...}. La documentation de Spring utilise uniquement #{...}, mais de nombreux exemples utilisent ${...}. De plus, quand j'ai commencé avec SpEL, on m'a dit d'utiliser ${...} et ça marche bien.

Pour ceux qui sont confus, un exemple de la façon dont je l'utilise serait

@Component
public class ProxyConfiguration {

    @Value("${proxy.Host}")
    private String Host;
    @Value("${proxy.port}")
    private String port;

    :
}

et un fichier de propriétés:

proxy.Host=myproxy.Host
proxy.port=8000

Mes questions sont:

  • quelles sont les différences ou est-ce la même chose?
  • une version est-elle obsolète, je devrais donc utiliser l'autre?
113
sjngm

${...} est la syntaxe de l'espace réservé de propriété. Il ne peut être utilisé que pour déréférencer des propriétés.

#{...} est syntaxe SpEL , ce qui est beaucoup plus efficace et complexe. Il peut également gérer des espaces réservés de propriété, et bien plus encore.

Les deux sont valides et aucun n'est obsolète.

120
skaffman

${expr} -> Évaluation immédiate

#{expr} -> Évaluation différée

Une évaluation immédiate signifie que l'expression est évaluée et le résultat renvoyé dès que la page est rendue pour la première fois. Une évaluation différée signifie que la technologie utilisant le langage d'expression peut utiliser sa propre machine pour évaluer l'expression un peu plus tard au cours du cycle de vie de la page, chaque fois que cela est approprié.

référence complète ici

Il n'y a pas JSP EL, JSP utilise SpEL. SpEL s'adapte à la technologie qui l'utilise.

10
XvrCJ

Essayez de lire cet article , ce qui suggère

"Si le hachage est utilisé, votre code est recalculé chaque fois que cet élément est inclus dans une actualisation partielle (c'est-à-dire à chaque fois qu'il est rendu). Si vous utilisez un dollar, votre code n'est calculé que lors du chargement initial de la page. Mais cela a été étendu au-delà de EL, à SSJS aussi. Après le hachage ou le dollar, les accolades indiquent le début et la fin de votre langue. Cela sera important lorsque nous viendrons à combiner les langues plus tard. "

0
chrisp7575