首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 5/6中批注的批注

Java 5/6中批注的批注
EN

Stack Overflow用户
提问于 2009-11-26 01:03:30
回答 1查看 765关注 0票数 2

我正在设置Hibernate缓存,并希望缓存不同区域中的某些实体。例如,一些实体可能会“陈旧”长达5分钟,一些实体可能会“陈旧”一小时,而有些实体(比如查找)几周内都不会改变。为了在我的代码中方便地配置区域,我尝试了以下方法:

我创建了一个名为@LookupCache (和@DailyCache等)的注释。

代码语言:javascript
复制
@Cache(region = "lookups", usage = CacheConcurrencyStrategy.READ_ONLY)
@Retention(RetentionPolicy.RUNTIME)
public @interface LookupCache {}

我将该注释添加到我的Hibernate/JPA实体中:

代码语言:javascript
复制
@LookupCache
public class Course {}

这样,我就可以轻松地更改@LookupCache的区域或属性,而不必更改每个类的注释参数。

但是,缓存加载器不会采用这种继承的@Cache表示法。如何让@LookupCache批注继承应用于它的批注?

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

EN

回答 1

Stack Overflow用户

发布于 2009-12-03 10:17:05

下面是一个简单的示例,展示了如何检索应用于@LookupCache注释的@Cache注释的详细信息:

代码语言:javascript
复制
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());

你只需要确保@缓存注解也有@Retention(RetentionPolicy.RUNTIME)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1798401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档