我正在尝试编写一个注释用@Cacheable
注释的注释。目标是添加一些我稍后在手动初始化缓存时访问的属性。乍一看它似乎与Writing a custom Spring @Cacheable annotation类似,但我正在尝试使用@AliasFor
而不是沿着解析器路径。
这是我到目前为止所拥有的:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Inherited
@Cacheable
public @interface CacheableLocal {
@AliasFor(annotation = Cacheable.class, attribute = "value")
String[] value() default {};
@AliasFor(annotation = Cacheable.class, attribute = "cacheNames")
String[] cacheNames() default {};
@AliasFor(annotation = Cacheable.class, attribute = "key")
String key() default "";
@AliasFor(annotation = Cacheable.class, attribute = "keyGenerator")
String keyGenerator() default "";
@AliasFor(annotation = Cacheable.class, attribute = "condition")
String condition() default "";
@AliasFor(annotation = Cacheable.class, attribute = "unless")
String unless() default "";
int maxEntries() default 100;
long ttlSeconds() default 1800L;
}
我希望像这样使用这个新的注释:
@CacheableLocal(cacheNames = "dictionary", maxEntries = 300, ttlSeconds = 1800)
public String getDefinition(String word) {
...
}
我遇到的问题是尽管存在cacheNames
,但@Cacheable
值与@AliasFor
元注释没有关联。因此,虽然我可以看到Spring在合成时正确地找到了@Cacheable
注释中的@CacheableLocal
元注释,但它没有考虑应该设置的值。
它类似于最近报道的Spring bug https://jira.spring.io/browse/SPR-13475。它不完全一样,所以我希望我做错了,除了等待Spring 4.3之外还有一个简单的解决方案:) :)