キャッシュ機能は、Spring Framework のキャッシュ モジュールを介して便利に使用できます。中でも SpEL (Spring Expression Language) 式は、キャッシュキーやキャッシュ値の動的な生成を実現するために
@Cacheable
、@CachePut
、 、その他のアノテーション@CacheEvict
で広く使用されています。では、Spring Framework におけるキャッシュ モジュールの SpEL 使用設計はどのようなものでしょうか?
まず、SpEL の 3 つの主要コンポーネント、SpEL解析器
、 、SpEL上下文
およびを理解する必要がありますSpEL表达式
。SpEL パーサーは SpEL 式を解析するために使用され、SpEL コンテキストは SpEL 式に必要な変数、関数、型などへのアクセスを提供し、SpEL 式は動的に生成された値を表すために使用されます。
キャッシュ モジュールの@Cacheable
、@CachePut
、および t アノテーション@CacheEvic
は SpEL 式を使用して、キャッシュ キーとキャッシュ値の動的な生成を容易にします。SpEL 式言語は非常に柔軟で、オブジェクト プロパティへのアクセス、メソッド パラメータ、オブジェクト メソッドの呼び出しなどをサポートしており、演算子や論理演算子なども使用できます。したがって、特定のアプリケーション シナリオに合わせて、必要に応じて SpEL 式を自由に構築できます。
次に、キャッシュ モジュールのソース コードの実装を見てみましょう。キャッシュ モジュールの SpEL 使用設計は、主に次の 3 つのコンポーネントを中心に展開します。
-
SpEL パーサー:
SpEL パーサーはorg.springframework.expression.spel.standard.SpelExpressionParser
クラスによって実装されます。このクラスは、SpEL 式を解析するための ExpressionParser インターフェイスを実装します。このクラスのソース コードのスニペットを次に示します。public class SpelExpressionParser implements ExpressionParser { private final SpelParserConfiguration configuration; public SpelExpressionParser() { this.configuration = new SpelParserConfiguration(false, false); } public SpelExpressionParser(SpelParserConfiguration configuration) { this.configuration = configuration; } @Override public Expression parseExpression(String expressionString) throws ParseException { SpelExpression expr = new SpelExpression(expressionString, this.configuration); return expr; } }
このクラスでは、ExpressionParser インターフェイスを実装し、parseExpression メソッドを通じて SpEL 式を解析し、Expression オブジェクトを返していることがわかります。
-
SpEL コンテキスト
SpEL コンテキストはorg.springframework.expression.spel.support.StandardEvaluationContext
クラスによって実装されます。このクラスは、变量、函数、类型
SpEL 式に必要ななどへのアクセスを提供します。このクラスのソース コードのスニペットを次に示します。public class StandardEvaluationContext extends EvaluationContextImpl implements ParserContext { public StandardEvaluationContext() { this(null, null, null); } public StandardEvaluationContext(Object rootObject) { this(null, rootObject, null); } public StandardEvaluationContext(Object rootObject, Method method, Object[] args, ParameterNameDiscoverer parameterNameDiscoverer) { this(method, args, parameterNameDiscoverer); setRootObject(rootObject); } // more code... }
EvaluationContextImpl
このクラスでは、クラスを拡張し、ParserContext
インターフェイスを実装していることがわかります。SpEL 式で必要な変数、関数、型などへのアクセスを提供し、コンストラクターを通じて rootObject、メソッド、引数などのパラメーターを設定して、現在のメソッドのパラメーター、戻り値、例外などにアクセスできます。 -
SpEL 式
SpEL 式は、動的に生成された値を表すテキストベースの言語です。SpEL 式の例をいくつか示します。
- オブジェクトのプロパティにアクセスする: #root.target.someProperty
- アクセスメソッドの引数: #root.args[0]
- オブジェクトメソッドの呼び出し: #root.target.someMethod()
- 演算子を使用: 1 + 2
- 論理演算子を使用します: #root.target.someProperty != null
-
SpEL 関連のアノテーション
Spring Framework では、キャッシュ モジュールは、アプリケーションでキャッシュを使用するための@Cacheable
、@CachePut
、およびその他のアノテーションを提供します。アノテーションのソース コードのスニペットを@CacheEvict
次に示します。@Cacheable
@Cacheable(value = "myCache", key = "#id") public MyObject findById(Long id) { // method body }
@Cacheable
このコード スニペットでは、アノテーションが value 属性と key 属性を定義していることがわかります。ここで、key 属性は SpEL 式 #id を使用してキャッシュ キーを表しています。
要約する
Spring Framework のキャッシュ モジュールの SpEL 使用設計は非常に柔軟であり、特定のアプリケーション シナリオに従って SpEL 式を自由に構築できます。SpEL パーサー、SpEL コンテキスト、SpEL 式の 3 つのコンポーネントを通じて、SpEL 式を簡単に使用して、キャッシュ キー、キャッシュ値などを動的に生成できます。