春天最简单/最透明的缓存方法是什么?

时间:2009-07-28 07:31:42

标签: java spring caching

如果我有一堆DAO和一堆getXXX方法,并且我想要缓存的方法的所有或一些明确的列表,那么我可以用Spring透明地做到这一点吗?

我不想要的是:

  • 更改任何源代码/添加 anotations
  • 手动必须为多个DAO创建一些代理bean并重新连接它们。

理想情况下,使用正则表达式匹配DAO和方法来缓存并根据需要自动将其自身包裹在DAO中。

我们正在使用OSCache,所以这样做的例子太棒了。

3 个答案:

答案 0 :(得分:1)

您可以使用@Cacheable中的jcabi-aspects注释和AOP方面:

@Cacheable(lifetime = 5, unit = TimeUnit.SECONDS)
public String load(URL url) {
  return url.openConnection().getContent();
}

答案 1 :(得分:0)

Spring AOP是你想要的,我想。这将使您能够为DAO自动创建代理对象,而无需手动完成所有这些对象。

这是一个复杂的主题,所以我建议您使用Spring文档read the relevant section。但是,作为一个让您入门的想法,BeanNameAutoProxyCreator可能对您有用。 AspextJK的东西是全面的AOP方法,但它非常可怕。基于Schema的AOP方法相当容易,但灵活性较低。

  

该计划的核心原则之一   Spring Framework就是这样的   非侵入性;这是个主意   你不应该被迫   介绍特定于框架的类   和你的接口   商业/领域模型。但是,在   Spring Framework的一些地方   给你介绍的选择   Spring Framework特定的依赖项   进入你的代码库:基本原理   给你这样的选择是因为在   某些情况可能只是   简单易读或编码一些   特定的功能   这样的方式。 Spring框架   (几乎)总是为您提供选择   虽然:你有自由   一个明智的决定   选项最适合您的特定用途   案例或情景。

     

与此相关的一个选择   本章是其中的AOP   框架(以及哪种AOP风格)   选择。您可以选择AspectJ   和/或Spring AOP,你也有   选择@AspectJ   注释式方法或   Spring XML配置风格   做法。本章的事实   选择介绍   @ AspectJ式的方法首先应该   不能作为表示   Spring团队赞成@AspectJ   注释式的方法   Spring XML配置风格。

     

见第6.4节,   “选择哪种AOP声明风格   使用“更全面的讨论   为什么和每种风格的原因。

至于实际的缓存,你必须自己做,但是一旦AOP钩子被集成,这应该是直截了当的。

答案 2 :(得分:0)

您可以尝试Spring Modules提供的缓存。它通过方面进行缓存,并支持多种缓存解决方案,如OsCache,EHCache,JBoss Cache等。