SpEL - Error: Method cannot be found on type

SpEL - Error: Method cannot be found on type

我在尝试实施 spring 缓存时遇到了问题。运行。

我只能提供一个示意图片段(发布真实代码可能会让我被解雇 :S)

public class CacheTestServiceImpl {

    @Cacheable(value=SOME_STRING_CONSTANT, key="#root.targetClass.createHashCode(#root.args[0])")
    public int getID(String userName, String someOtherParam) {
    } 

    public int createHashCode(String userName) {
        return 0;
    }
}

我不断收到的错误是 EL1004E:(pos 18): Method createHashCode(String) cannot be found on CacheTestServiceImpl type.

对我可能做错了什么有什么建议吗?如果您需要任何进一步的信息,我很乐意提供给您 :) 谢谢

编辑:我刚刚有了 "brilliant" 搜索错误代码本身的想法并挖出了这个:relevant stack-oerflow question

所以我会检查一下并保持这个问题的更新..

我看到 2 个潜在问题。

  1. createHashCode 是私有的

  2. createHashCode 是静态的。有一种特殊的拼写语法可以调用静态方法:http://docs.spring.io/spring/docs/3.0.5.RELEASE/reference/expressions.html#d0e11977

您正在尝试调用 static 方法 createHashCode,但您的 class 没有声明任何方法。因此,要么使您的方法静态化,要么使用 #root.target.createHashCode(#root.args[0]) SpEL 表达式。

参考Spring Cache abstraction reference了解更多信息