クラス SimpleEvaluationContext

java.lang.ObjectSE
org.springframework.expression.spel.support.SimpleEvaluationContext
実装済みのインターフェース一覧:
EvaluationContext

public final class SimpleEvaluationContext extends ObjectSE implements EvaluationContext
基本的な SpEL 機能とカスタマイズオプションのサブセットに焦点を当てた EvaluationContext の基本的な実装で、単純な条件評価と特定のデータバインディングシナリオを対象としています。

多くの場合、SpEL 言語の全機能を使用する必要はなく、適切に制限する必要があります。例としては、データバインディング式、プロパティベースのフィルターなどが挙げられますが、これらに限定されません。そのため、SimpleEvaluationContext は SpEL 言語構文のサブセットのみをサポートするように設計されており、たとえば、Java 型、コンストラクター、Bean 参照などは除外されています。

SimpleEvaluationContext を作成するときは、SpEL 式でのデータバインディングに必要なサポートレベルを選択する必要があります。

  • 読み取り専用アクセスのデータバインディング
  • 読み取りおよび書き込みアクセスのデータバインディング
  • カスタム PropertyAccessor (通常、反射ベースではない)、DataBindingPropertyAccessor と組み合わせる可能性

便利なことに、forReadOnlyDataBinding()DataBindingPropertyAccessor を介してプロパティへの読み取り専用アクセスを可能にします。同様に、forReadWriteDataBinding() はプロパティへの読み取りおよび書き込みアクセスを可能にします。あるいは、forPropertyAccessors(PropertyAccessor...) を介してカスタムアクセサーを構成し、代入を無効にすることを検討し(推奨)、必要に応じてビルダーを介してメソッド解決や型コンバーターを有効化することもできます。

SimpleEvaluationContext は通常、デフォルトのルートオブジェクトで構成されていないことに注意してください。代わりに、一度作成され、EvaluationContext とルートオブジェクトの両方を引数として持つ定義済み Expression に対する getValue 呼び出しを通じて繰り返し使用されることを目的としています: Expression.getValue(EvaluationContext, Object)

EvaluationContext API で定義されている変数の設定と検索のサポートに加え、SimpleEvaluationContext は関数を変数として登録および検索することもサポートします。この評価コンテキストでは関数は変数と共通の名前空間を共有するため、関数名と変数名が重複しないように注意する必要があります。

パワーと柔軟性を高めるため、特に内部構成のシナリオでは、代わりに StandardEvaluationContext の使用を検討してください。

警告 SimpleEvaluationContext は SpEL 言語をその機能のサブセットに制限しますが、この制限は最善の努力に基づいて提供されるものであり、式の評価が安全であることを保証するものではありません。信頼できないソースから取得した SpEL 式を評価する場合、SimpleEvaluationContext は安全とはみなされません。この責任はプロパティアクセサーにもおよびます。SimpleEvaluationContext を読み取り専用のデータバインディングに制限しても、プロパティへの代入が許可されるかどうかのみを制御し、プロパティの読み取りに副作用がないことを検証するものではありません。詳細については、Spring Framework リファレンスドキュメントのセキュリティに関する考慮事項およびオブジェクトデザインセクション、ならびに ReflectivePropertyAccessor および DataBindingPropertyAccessor のクラスレベルのドキュメントを参照してください。

解析された Expression は、特定の EvaluationContext 構成に対して解決されたアクセサーおよびエグゼキュータの状態をキャッシュする可能性があるため、解析された Expression を最初に StandardEvaluationContext (または他の制限の緩い EvaluationContext) に対して評価し、その後 SimpleEvaluationContext に対して評価することは決してあってはなりません。同じ式文字列を両方の種類のコンテキストで評価する必要がある場合は、代わりにそれを 2 つの異なる Expression インスタンスに解析してください。このライフサイクル契約の詳細については、Expression を参照してください。

導入:
4.3.15
作成者:
Rossen Stoyanchev, Juergen Hoeller, Sam Brannen
関連事項: