我在尝试实现弹簧缓存时遇到了问题。
我只能提供一个原理图片段(发布实际代码可能会让我解雇: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所以我会检查出来并保持这个问题更新..
答案 0 :(得分:1)
您正在尝试调用静态方法createHashCode,但您的类未声明任何内容。因此,要么将方法设为静态,要么使用#root.target.createHashCode(#root.args[0])
SpEL表达式。
有关详细信息,请参阅Spring Cache abstraction reference
答案 1 :(得分:0)
我发现了两个潜在的问题。
createHashCode是私有的
createHashCode是静态的。有一种特殊的spel语法可以调用静态方法:http://docs.spring.io/spring/docs/3.0.5.RELEASE/reference/expressions.html#d0e11977