有没有办法使用Spring Framework的缓存抽象来总是返回一个对象的缓存化身?
我有一个图像大小调整方法。 resize()
方法返回一个临时File
,它使用我的手动二进制文件Cache
使用Spring的缓存抽象进行缓存。该方法本身通过@Cacheable
进行缓存,一切正常。
难点在于我需要以某种方式清理此方法生成的临时文件,并将其添加到缓存中。
换句话说,目前的行为是:
首次调用resize()
- 返回/tmp/somefile.jpg
生成的文件,该文件由Spring添加到缓存中。
第二次调用resize()
- 会导致缓存命中,因此从/myCache/somefile.jpg
这导致临时文件挥之不去。
我无法在Cache#put(Object key, Object value)
方法中删除源文件,因为这是从关联方法的非缓存调用返回的文件。
有没有人遇到类似的情况并用优雅的解决方案解决了?理想情况下,我希望所有可缓存方法的调用都能返回缓存对象。
答案 0 :(得分:2)
我通过直接与Cache#get()
和Cache#put()
进行交互来解决这个问题,绕过了Spring更优雅的基于注释的方法。
它不漂亮,但它有效。