2009-11-25 90 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