2013-01-25 70 views
1

有沒有一種方法使用Spring框架的緩存抽象總是返回緩存的對象的化身?如何總是用Spring的緩存抽象返回緩存的對象

我有一個圖像調整大小的方法。 resize()方法返回一個臨時的File,它使用我的手動二進制文件Cache使用Spring的緩存抽象進行緩存。該方法本身緩存通過@Cacheable和一切正常。

難點在於我需要以某種方式清理這個方法生成的臨時文件,並將它們添加到緩存中。

換句話說,目前的行爲是:

  1. resize()首先調用 - 在/tmp/somefile.jpg生成的文件的回報這是由Spring添加到緩存中。

  2. resize()第二次調用 - 導致緩存命中,所以返回從/myCache/somefile.jpg

文件這導致臨時文件徘徊在。

我無法刪除我的Cache#put(Object key, Object value)方法中的源文件,因爲這是從非緩存調用相關方法返回的文件。

有沒有人遇到類似的情況,並用優雅的解決方案解決它?理想情況下,我希望緩存方法的所有調用都返回緩存對象。

+0

我希望唯一的解決方案不是http://stackoverflow.com/questions/10827267/how-to-prevent-a-return-value-from-cache-to-be-changed-in-spring-cacheable ?rq = 1,因爲我的AspectJ絕對是rope ... ......! – nullPainter

回答

1

我已經繞過這個問題,直接與Cache#get()Cache#put()交互,避開了Spring更加優雅的基於註釋的方法。

這不是美麗的,但它的作品。