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