1

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

所以我想要这样的东西:

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

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

如何使用复合键的问题可能可以像这个 SO 问题一样解决:@Cacheable key on multiple method arguments

但是,我找不到有关如何在此表达式中引用另一个 spring bean 的任何信息。有可能吗?如果可以,怎么做?

4

2 回答 2

2

您可以在 Spring 文档 ( http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/expressions.html )中获得很多关于 SpEL 的详细信息。如您所见,您可以使用@myBean语法来使用 bean 引用。您必须在上下文中包含一个 bean 解析器才能做到这一点。

于 2013-02-01T21:09:26.413 回答
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);

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

于 2018-12-13T17:13:46.637 回答