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