使用@AliasFor

时间:2015-10-27 14:45:56

标签: spring caching annotations

我正在尝试编写一个注释用@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之外还有一个简单的解决方案:) :)

0 个答案:

没有答案