【问题标题】:Spring @Cachable bean reference in key键中的 Spring @Cachable bean 引用
【发布时间】:2013-02-01 17:27:06
【问题描述】:

我想在我的一个方法上使用@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 的任何信息。有没有可能,如果有,怎么做?

【问题讨论】:

    标签: spring ehcache spring-el


    【解决方案1】:

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

    【讨论】:

    • 好的,从我在日志中看到的@myBean 语法似乎可以满足我的要求。但我不知道如何在我的上下文中包含一个 bean 解析器。你能举个例子或链接吗?我用谷歌搜索了它,但找不到任何有用的东西......
    【解决方案2】:

    不能使用当前的 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);
    

    只要确保你的属性是公开的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-20
      • 2012-05-30
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多