如果我有一堆DAO和一堆getXXX方法,并且我想要缓存的方法的所有或一些明确的列表,那么我可以用Spring透明地做到这一点吗?
我不想要的是:
理想情况下,使用正则表达式匹配DAO和方法来缓存并根据需要自动将其自身包裹在DAO中。
我们正在使用OSCache,所以这样做的例子太棒了。
答案 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等。