Spring > SpEL

  • SpELは実行時のオブジェクトグラフのクエリ、操作に使える
  • SpELはSpringとは独立して使える
  • パーサ:SpelExpressionParser
    • parser.parseExpression(...)
  • パース結果の表現:Expression
    • exp.getValue()
    • exp.getValue(clazz)
    • exp.getValue(target):オブジェクトが変化する場合
    • exp.getValue(context):オブジェクトが変化しない場合
    • exp.getValue(target, context):targetが優先
  • EvaluationContextインターフェース
    • 実装:StandardEvaluationContext
    • パース対象のルートオブジェクトの指定
    • ConstructorResolver,MethodResolver,PropertyAccessorを登録できる
    • SpElでは、必要におうじて型変換を行ってくれる。
      • ジェネリクスの型情報も解決しくれる。
  • ビーン定義での利用
    • #{ <expression string> }
    • #{ systemProperties['xxx'] }
    • #{ <bean参照> }
    • アノテーションでのビーンで意義ではフィールド/メソッド/パラメータに@Valueで指定(デフォルト値)
  • リテラル式
    • String
      • シングルクウォートで囲む
    • Date
    • Numeric
    • boolean
    • null
    • リスト
      • {a,b,...}
    • 配列
      • new int[4],new int[]{1,2,3},new int[4][5](多次元配列の初期化はできない)
  • プロパティ
    • ピリオド(.)でアクセス
  • 配列、リスト
    • 要素には[i]でアクセス
  • Map
    • あるキーxxxの値には['xxx']でアクセス
  • メソッドのinvoke
    • 通常通りの書き方
    • コンテキストを使う場合
      parser.parseExpression("isMember('Mihajlo Pupin')").getValue(societyContext,Boolean.class);
      
  • Operators
    • =,>,>=,<,<=
    • instanceof
    • matches
    • lt,le,gt,ge,eq,ne
    • div,mod
    • and,or,not
    • +-*/%
      -Assignment
  • Types:T()
    • Classインスタンスを見つける
    • staticメソッドを実行する
    • java.langパッケージ以外のクラスはパッケージも指定する
  • Constructors:new
  • Variables:#var
    • StandardEvaluationContext.setVariableで登録
    • #this:現在評価しているオブジェクト
    • #root:評価対象のルートオブジェクト
  • Functions
    • ユーザ定義関数を作れる。:#function_nameで利用
    • API
      StandardEvaluationContext.registerFunction(String name, Method m)
      
  • ビーン参照
    • ビーン参照を解決するをBeanResolverオブジェクトを登録
      context.setBeanResolver(...);
      
    • SpELでは@fooで参照する
  • Ternary Operator
    A ? B : C
    
  • Elvis Operator
    • a = (a != null ? a : b)の短縮
      a?:b
      
  • Safe Navigation operator
    • NullPointerException の代わりにnullを返す
      a?.b -> null (a=nullの時)
      
  • Collection Selection
    • コレクションの要素を選択できる(リスト、マップ)
      list.?[selectionExpression]
      map.?[selectionExpression] (valueとかkeyとかつかえる)
      ^[selectionExpression] 最初の要素
      $[selectionExpression] 最後の要素
      
  • Collection Projection
    • コレクションの要素の一部の情報をつかって、新しいコレクションを得る(リスト、マップ)
      col.![projectionExpression]
      
  • Expression templating
    • 式をテンプレートとして扱える。
    • 変数部分はParserContextクラスで区切り文字を指定する。
      parser.parseException("<template>", parserContext)
      
最終更新:2012年02月23日 14:11
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。