Spring中的@Cachable bean引用

时间:2013-02-01 17:27:07

标签: spring ehcache spring-el

我想在我的一个方法上使用@Cachable注释,但我遇到了问题,结果取决于一个不属于方法签名的spring bean的属性。

所以我想要这样的事情:

@Cachable(value="mycache", key="#id, #myspringbean.referenceId")
MyResult myMethod(int id);

我想这些实际上是两个问题:如何使用复合键以及如何在表达式中使用另一个spring bean。

如何使用复合键的问题可能会像在这个问题中解决:@Cacheable key on multiple method arguments

但是,我找不到任何关于如何在这个表达式中引用另一个spring bean的方法。是否可能,如果可以,怎么样?

2 个答案:

答案 0 :(得分:1)

您可以在Spring文档中详细了解SpEL(http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/expressions.html)。如您所见,您可以使用@myBean语法来使用bean引用。您必须在上下文中包含一个bean解析器才能执行此操作。

答案 1 :(得分:0)

不可能使用当前的Spring bean名称。 我想我将使用以下模式,以便每个bean对象都具有自己的“键空间”,另请参见What can be the default key generator。 至于以上问题可以使用:

@Cachable(value="mycache", key = "{#id, #root.targetClass.getDeclaredField('attribute').get(#root.target)}")
MyResult myMethod(int id);

只需确保您的属性是公开的