2009-11-25 53 views
2

我正在设置Hibernate缓存并希望缓存不同区域中的某些实体。例如,一些实体可能会“陈旧”达5分钟,有些实体可能会持续一个小时,有些实体(如查找)在几周内不会改变。为了促进地区的简易配置在我的代码,我想以下几点:Java中的注释注解5/6

我创建(@DailyCache和等)

@Cache(region = "lookups", usage = CacheConcurrencyStrategy.READ_ONLY) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface LookupCache {} 

命名为@LookupCache注释而且我还说注解到我的休眠/ JPA实体:

@LookupCache 
public class Course {} 

这样一来,我可以很容易地改变区域或@LookupCache的属性,而不必更改每个类的注释PARAMS。

但是,缓存加载器不会选取此继承的@Cache表示法。如何获得@LookupCache注释以继承应用于其的注释?

更新:为了澄清,@Cache注释是由EHCache等二级缓存使用的内置hibernate注释。我无法修改@Cache注释以使其可以被其他注释继承(我的客户端不想维护一个特殊的休眠分支)。这可能是我唯一的选择。

+2

注解不能像那样工作,恐怕。没有像你正在寻找的“继承”,这是由Hibernate明确做到的,这不会发生,因为它是一个自定义注释。 – skaffman 2009-11-25 17:15:46

+0

干这么多。谢谢。 – 2009-11-25 17:40:51

回答

2

下面是一个简单的例子来说明如何检索应用到您的@LookupCache注解@Cache标注的详细信息:

Course c = new Course(); 
LookupCache lookupCache = c.getClass().getAnnotation(LookupCache.class); 
Cache cache = lookupCache.annotationType().getAnnotation(Cache.class); 
System.err.println("region " + cache.region()); 
System.err.println("usage " + cache.usage()); 

你只需要确保@Cache注释也有@Retention(的RetentionPolicy .RUNTIME)

+0

这是我正在寻找阅读注释的注释的receipe!由于getClass()。getAnnotations()正在返回代理! – 2013-09-04 20:36:09