web-dev-qa-db-ja.com

@Valueを使用したSpring Expression Language(SpEL):ドル対ハッシュ($対#)

${...}と比較して#{...}を使用するタイミングに関して少し混乱しています。 Springのドキュメントでは#{...}のみを使用していますが、${...}を使用する例はたくさんあります。さらに、SpELを使い始めたとき、${...}を使用するように言われましたが、正常に動作します。

混乱している人のために、私がそれをどのように使用するかの例は

@Component
public class ProxyConfiguration {

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

    :
}

およびいくつかのプロパティファイル:

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

私の質問は:

  • 違いは何ですか、それとも同じですか?
  • 推奨されないバージョンがあるので、他のバージョンを使用する必要がありますか?
113
sjngm

${...}は、プロパティのプレースホルダー構文です。プロパティの間接参照にのみ使用できます。

#{...}SpEL構文 であり、はるかに機能的で複雑です。プロパティプレースホルダーなども処理できます。

両方とも有効で、どちらも非推奨ではありません。

120
skaffman

${expr}->即時評価

#{expr}->遅延評価

即時評価とは、式が評価され、ページが最初にレンダリングされるとすぐに結果が返されることを意味します。遅延評価とは、式言語を使用するテクノロジーが独自の機構を使用して、ページのライフサイクル中にいつでも適切なときに式を評価できることを意味します。

ここで完全なリファレンス

JSP ELはありません。JSPはSpELを使用します。 SpELは、それを使用しているテクノロジーに適合しています。

10
XvrCJ

この記事 を読んでみてください。

「ハッシュを使用すると、その要素が部分更新に含まれるたびに(つまり、レンダリングされるたびに)コードが再計算されます。ドルを使用すると、コードはページが最初にロードされたときにのみ計算されます。 ELを超えてSSJSにも拡張されました。ハッシュまたはドルの後、中括弧は言語の開始と終了を示します。これは、後で言語を組み合わせる場合に重要になります。」

0
chrisp7575