如何始终使用Spring缓存抽象返回缓存对象

时间:2013-01-25 08:38:33

标签: spring caching

有没有办法使用Spring Framework的缓存抽象来总是返回一个对象的缓存化身?

我有一个图像大小调整方法。 resize()方法返回一个临时File,它使用我的手动二进制文件Cache使用Spring的缓存抽象进行缓存。该方法本身通过@Cacheable进行缓存,一切正常。

难点在于我需要以某种方式清理此方法生成的临时文件,并将其添加到缓存中。

换句话说,目前的行为是:

  1. 首次调用resize() - 返回/tmp/somefile.jpg生成的文件,该文件由Spring添加到缓存中。

  2. 第二次调用resize() - 会导致缓存命中,因此从/myCache/somefile.jpg

  3. 返回文件

    这导致临时文件挥之不去。

    我无法在Cache#put(Object key, Object value)方法中删除源文件,因为这是从关联方法的非缓存调用返回的文件。

    有没有人遇到类似的情况并用优雅的解决方案解决了?理想情况下,我希望所有可缓存方法的调用都能返回缓存对象。

1 个答案:

答案 0 :(得分:2)

我通过直接与Cache#get()Cache#put()进行交互来解决这个问题,绕过了Spring更优雅的基于注释的方法。

它不漂亮,但它有效。