1

我目前正在编写一个自定义@Cacheable注释,除了 Spring 的@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 以便您将自己的 CacheAnnotationParser 除了 Spring 之一放在内部解析器集合中
  • 定义您的自定义 AnnotationCacheOperationSource 以使用与 Spring 相同的 id,因此它将覆盖 Spring 内部。如果 id 匹配,它应该干净地覆盖 Spring 一。这将是这样的:

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

于 2013-11-13T09:21:17.977 回答