2013-07-30 155 views
3

我試圖在我的應用程序中使用Ehcache和Spring 3.1內置緩存註釋(@Cacheable,@CacheEvict和@CachePut)來實現緩存。Spring的@CachePut註釋是否可以使用void返回類型?

我創建了一個高速緩存如下:

@Cacheable(value = "userCache", key = "#user.id") 
public List<User> getAllUsers() { 
... 
} 

我試圖更新此緩存使用,如下@CachePut註釋的新值:

@CachePut(value = "userCache", key = "#user.id") 
public void addUser(User user) { 
... 
} 

然而,新的「用戶「未被添加到緩存中。這是因爲void返回類型嗎?

回答

6

是的,這是因爲void返回類型。 @CachePut註釋將方法的結果放入緩存中。在你的情況下,沒有結果,因此沒有任何東西放到緩存中。

更改方法簽名返回用戶:ADDUSER的

public User addUser(User user) { 
    ... 
} 
2

這不會工作,因爲你正在使用相同的緩存值「userCache」,但迴歸方法getAllUsers的類型列表,返回類型是用戶。這會在已經存儲在緩存中的數據中產生不一致。

(List + User):這種類型的數據將在緩存中形成。

後來當您將調用方法getAllUsers,代碼將

列表用戶列表= getAllUsers();

但是在這種情況下,數據將從緩存中獲取並拋出「類轉換異常」。

由於(列表+用戶)不能轉換爲列表。

有沒有解決方法?我堅持這一點,不知道如何繼續。將使用自定義註釋在這裏工作?

相關問題