註解驅動的緩衝
除了前面介紹的基於XML的緩衝配置,Spring Modules還支援使用代碼級中繼資料聲明緩衝。這種支援有兩種形式:
Java 5註解:如果目標環境是Java 5平台,這就是很理想的解決方案。
Jakarta公用屬性:如果目標環境是Java 5以前的平台,就應該選擇它。
對於RoadRantz程式來說,其目標環境是Java 5,所以我們要使用Java 5註解來聲明DAO層的緩衝。對於緩衝,Spring Modules提供了兩個註解:
@Cacheable:聲明一個方法的傳回值應該被緩衝。
@CacheFlush:聲明一個方法是清空緩衝的觸發器。
利用@Cacheable註解,我們可以像下面這樣把getRantsForDay()聲明為要被緩衝的:
modelId屬性指定用於緩衝方法傳回值的模型,稍後我們介紹說明如何定義緩衝模型,現在先來看一看如何使用@CacheFlush來指定saveRant()被調用時的緩衝清空操作:
modelId屬性指定的重新整理模型會在saveRant()方法被調用時被清空。
既然說到緩衝模型和重新整理模型,那麼它們是從何而來的呢?元素被用於啟動Spring Modules對註解的支援,我們會在roadrantzcache.xml檔案裡像下面這樣配置它:
在元素裡,必須配置至少一個元素,它就定義了一個緩衝模型。簡單 來說,緩衝模型基本上就是對ehcache.xml裡配置的一個緩衝的引用。本例中,我們把rantzCacheModel與名為rantzCache的 緩衝關聯起來,這樣一來,任何modelId是rantzCacheModel的@Cacheable都會使用名為rantzCache的緩衝。
重新整理模型與緩衝模型相當類似,只是它引用的是要被重新整理的緩衝。下面使用元素建立一個名為rantzFlushModel的重新整理模型:
設定緩衝模型與重新整理模型的不同之處在於,重新整理模型不僅決定要清空哪個緩衝,還決定了何時清空。在預設情況下,緩衝是在@CacheFlush註解的方法被調用之後清空的,但我們可以通過指定<ehcache:flushing>的when屬性來改變:
把when屬性設定為before之後,緩衝就會@CacheFlush註解的方法被調用之前清空。