如何按照條件操作緩衝
前面介紹的緩衝方法,沒有任何條件,即所有對 accountService 對象的 getAccountByName 方法的調用都會起動緩衝效果,不管參數是什麼值,如果有一個需求,就是只有帳號名稱的長度小於等於 4 的情況下,才做緩衝,大於 4 的不使用緩衝,那怎麼實現呢。
Spring cache 提供了一個很好的方法,那就是基於 SpEL 運算式的 condition 定義,這個 condition 是 @Cacheable 注釋的一個屬性,下面我來示範一下 清單 13. AccountService.java(getAccountByName 方法修訂,支援條件)
| 1 2 3 4 5 |
@Cacheable(value="accountCache",condition="#userName.length() <= 4")// 緩衝名叫 accountCache public Account getAccountByName(String userName) { // 方法內部實現不考慮緩衝邏輯,直接實現業務 return getFromDB(userName); } |
注意其中的 condition=”#userName.length() <=4”,這裡使用了 SpEL 運算式訪問了參數 userName 對象的 length() 方法,條件運算式返回一個布爾值,true/false,當條件為 true,則進行快取作業,否則直接調用方法執行的返回結果。 清單 14. 測試方法
| 1 2 3 4 |
s.getAccountByName("somebody");// 長度大於 4,不會被緩衝 s.getAccountByName("sbd");// 長度小於 4,會被緩衝 s.getAccountByName("somebody");// 還是查詢資料庫 s.getAccountByName("sbd");// 會從緩衝返回 |
清單 15. 運行結果