@Valueを使用したSpring式言語(SpEL):ドルとハッシュ($と#)


126

${...}比較して、いつ使用するかについて少し混乱してい#{...}ます。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

私の質問は:

  • 違いは何ですか、それとも同じですか?
  • 1つのバージョンは廃止されているので、もう1つのバージョンを使用する必要がありますか?

回答:


139

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

#{...}あるSPEL構文はるかに可能と複雑です。また、プロパティのプレースホルダーなどを処理できます。

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


22
SpEL構文を使用してプロパティ値に正常にアクセスするには、フォーマット"#{'${property}'}"
Brice Roncace

1
再:上記のコメント- この回答
スティーブチェンバース

8

${expr} ->即時評価

#{expr} ->遅延評価

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

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

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


6
質問は、Spring ELを使用したSpring構成に関するものでしたが、Java EE Webテクノロジーについて話しています。そして、JSPはSpELを使用せず、JSPを実行するためにSpringも必要ありません
gregfqt

3
SpELを使用するJSPの最後のステートメントは完全に間違っています。
Michal M

2
さらに明確にするために:バージョン2.1以降のJSP。SpELのテンプレートとして機能するUnified EL docs.oracle.com/javaee/5/tutorial/doc/bnahq.htmlをサポートします。Springドキュメントから:「Spring Expression Language(略してSpEL)は、実行時のオブジェクトグラフのクエリと操作をサポートする強力な式言語です。言語構文はUnified ELに似ていますが、追加機能、特にメソッド呼び出しと基本文字列テンプレート機能。」
フリッツDuchardt 2015年

-1

読んで試してみてくださいこの記事を示唆して、

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


13
Spring ELとは何の関係もありません。JSPELについて話しています。
skaffman '16 / 03/11

@skaffman:もちろん、あなたが正しいとしても、それは興味深い情報です(少なくとも私にとっては...)。
sjngm 2011年

別の答えは、「JSP ELはなく、JSPはSpELを使用する」というものです。あれは正しいですか?
Carl G

1
Java EE仕様には、JSPおよびJSFで使用される「式言語」(EL)があります。Spring ELとは関係ありません。
gregfqt 2015年

-4

式言語の仕様•最終リリース-2006年5月8日

ページ2:

eval-expressionは、構造$ {expr}または#{expr}を使用して形成されます。ELを使用しているテクノロジーでは異なる意味を持つ可能性がありますが、両方の構成体は、ELによってまったく同じ方法で解析および評価されます。


2
これは私の質問のどの部分が答えるはずですか?それは2006年からであり、「まったく同じ方法で解析および評価される」および「異なる意味を持つ可能性がある」などの単語は、おそらく曖昧なため、おそらくそれを置くことができます。
sjngm 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.