SpEL - 错误:无法在类型上找到方法

时间:2016-05-10 10:33:44

标签: java spring caching annotations spring-el

我在尝试实现弹簧缓存时遇到了问题。

我只能提供一个原理图片段(发布实际代码可能会让我解雇: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.

关于我可能做错什么的任何建议?如果您需要任何进一步的信息,我很乐意提供它:) 感谢

编辑:我刚刚获得了#34;辉煌"搜索错误代码本身的想法并挖掘出来:relevant stack-oerflow question

所以我会检查出来并保持这个问题更新..

2 个答案:

答案 0 :(得分:1)

您正在尝试调用静态方法createHashCode,但您的类未声明任何内容。因此,要么将方法设为静态,要么使用#root.target.createHashCode(#root.args[0]) SpEL表达式。

有关详细信息,请参阅Spring Cache abstraction reference

答案 1 :(得分:0)

我发现了两个潜在的问题。

  1. createHashCode是私有的

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