我想在我的一个方法上使用@Cachable注释,但我遇到了问题,结果取决于一个不属于方法签名的spring bean的属性。
所以我想要这样的事情:
@Cachable(value="mycache", key="#id, #myspringbean.referenceId")
MyResult myMethod(int id);
我想这些实际上是两个问题:如何使用复合键以及如何在表达式中使用另一个spring bean。
如何使用复合键的问题可能会像在这个问题中解决:@Cacheable key on multiple method arguments
但是,我找不到任何关于如何在这个表达式中引用另一个spring bean的方法。是否可能,如果可以,怎么样?
答案 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);
只需确保您的属性是公开的