1

私は現在、Spring の@Cacheableが提供するものに加えて、追加のメタデータ属性を取るカスタム@Cacheableアノテーションを作成しています。ただし、Spring はこの新しいアノテーションを解析する方法を知る必要があります。私の理解では、AnnotationCacheOperationSourcedetermineCacheOperations()を拡張およびオーバーライドして、新しいアノテーションをそこから初期化された適切なCacheableOperationクラスで解析できるようにする必要があるということです。これは正しい進め方ですか?

よろしく、

スティーブ

4

1 に答える 1

2

依存します。

AnnotationCacheOperationSource javadocに従って、

このクラスは、Spring の Cacheable、CachePut、および CacheEvict アノテーションを読み取り、対応するキャッシング操作定義を Spring のキャッシュ インフラストラクチャに公開します。このクラスは、カスタム CacheOperationSource の基本クラスとしても機能する場合があります。

したがって、CacheOperationSource の拡張された動作のためにそのクラスを拡張できるかどうか、はい/いいえの答えを求めている場合、答えは「はい」です。

ただし、determineCacheOperations() メソッドが行うことは、使用可能なすべての CacheAnnotationParsers を使用することです。デフォルトの CacheAnnotationParser は SpringCacheAnnotationParser のみです。カスタムのものがある場合は、注釈用に CacheAnnotationParser を実装する別のクラスを用意してください。Spring はそれを自動的に使用する必要があります。SpringCacheAnnotationParser のソース コードを見て、その方法を確認できます。


編集:わかりました、これが自動的に行われるという点で私は間違っていました。私の次の提案は

  • どうやらすでに行ったように、インターフェース CacheAnnotationParser を実装します
  • AnnotationCacheOperationSource を拡張して、Spring に加えて独自の CacheAnnotationParser を内部パーサー コレクションに入れるようにします。
  • Spring と同じ ID を使用するようにカスタム AnnotationCacheOperationSource を定義して、Spring 内部をオーバーライドします。ID が一致する場合は、Spring をきれいにオーバーライドする必要があります。これは次のようになります。

    <bean id="annotationCacheOperationSource" class="com.company.YourCustomAnnotationCacheOperationSource" />

于 2013-11-13T09:21:17.977 に答える