Spring FrameworkにおけるキャッシュモジュールのSpEL利用設計

キャッシュ機能は、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 つのコンポーネントを中心に展開します。

  1. 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 オブジェクトを返していることがわかります。

  2. 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、メソッド、引数などのパラメーターを設定して、現在のメソッドのパラメーター、戻り値、例外などにアクセスできます。

  3. SpEL 式
    SpEL 式は、動的に生成された値を表すテキストベースの言語です。SpEL 式の例をいくつか示します。

  • オブジェクトのプロパティにアクセスする: #root.target.someProperty
  • アクセスメソッドの引数: #root.args[0]
  • オブジェクトメソッドの呼び出し: #root.target.someMethod()
  • 演算子を使用: 1 + 2
  • 論理演算子を使用します: #root.target.someProperty != null
  1. 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 式を簡単に使用して、キャッシュ キー、キャッシュ値などを動的に生成できます。

おすすめ

転載: blog.csdn.net/qq_37686995/article/details/130150488