我目前正在编写一个自定义 @Cacheable 注释,除了Spring @Cacheable 提供的属性外,还会采用其他元数据属性。但是,Spring需要知道如何解析这个新的注释。我的理解是,我需要扩展和覆盖 AnnotationCacheOperationSource 的 determineCacheOperations() ,以便可以使用适当的方法解析新的注释从它初始化的 CacheableOperation 类。这是正确的方法吗?
此致
史蒂夫
答案 0 :(得分:1)
取决于
根据AnnotationCacheOperationSource javadoc,
这个类读取了Spring的Cacheable,CachePut和CacheEvict 注释并将相应的缓存操作定义公开给 Spring的缓存基础架构。该类也可以作为基类 用于自定义CacheOperationSource。
因此,如果您可以扩展该类以获得CacheOperationSource的扩展行为,那么如果您要求是/否答案,答案是肯定的。
但是,determineCacheOperations()方法的作用是它使用所有可用的CacheAnnotationParsers。唯一的默认CacheAnnotationParser是SpringCacheAnnotationParser。如果你有一个自定义的,只需要另一个类为你的注释实现CacheAnnotationParser。然后Spring应该自动使用它。您可以查看SpringCacheAnnotationParser source code以了解它们是如何做到的。
编辑:好吧,我错了,因为这会自动发生。我的下一个建议是
定义您的自定义AnnotationCacheOperationSource以使用与Spring相同的ID,因此它将覆盖Spring内部。如果id匹配,它应该干净地覆盖Spring。这将是:
<bean id="annotationCacheOperationSource"
class="com.company.YourCustomAnnotationCacheOperationSource" />