编写自定义Spring @Cacheable注释

时间:2013-11-13 08:50:34

标签: java spring caching

我目前正在编写一个自定义 @Cacheable 注释,除了Spring @Cacheable 提供的属性外,还会采用其他元数据属性。但是,Spring需要知道如何解析这个新的注释。我的理解是,我需要扩展和覆盖 AnnotationCacheOperationSource determineCacheOperations() ,以便可以使用适当的方法解析新的注释从它初始化的 CacheableOperation 类。这是正确的方法吗?

此致

史蒂夫

1 个答案:

答案 0 :(得分:1)

取决于

根据AnnotationCacheOperationSource javadoc

  

这个类读取了Spring的Cacheable,CachePut和CacheEvict   注释并将相应的缓存操作定义公开给   Spring的缓存基础架构。该类也可以作为基类   用于自定义CacheOperationSource。

因此,如果您可以扩展该类以获得CacheOperationSource的扩展行为,那么如果您要求是/否答案,答案是肯定的。

但是,determineCacheOperations()方法的作用是它使用所有可用的CacheAnnotationParsers。唯一的默认CacheAnnotationParser是SpringCacheAnnotationParser。如果你有一个自定义的,只需要另一个类为你的注释实现CacheAnnotationParser。然后Spring应该自动使用它。您可以查看SpringCacheAnnotationParser source code以了解它们是如何做到的。


编辑:好吧,我错了,因为这会自动发生。我的下一个建议是

  • 实现接口CacheAnnotationParser,就像你显然已经做过
  • 一样
  • 扩展AnnotationCacheOperationSource,以便在内部解析器集合中添加自己的CacheAnnotationParser以及Spring one
  • 定义您的自定义AnnotationCacheOperationSource以使用与Spring相同的ID,因此它将覆盖Spring内部。如果id匹配,它应该干净地覆盖Spring。这将是:

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