我们知道Simple Keygenerator的工具如下:
@Override
public Object generate(Object target, Method method, Object... params) {
return generateKey(params);
}
/**
* Generate a key based on the specified parameters.
*/
public static Object generateKey(Object... params) {
if (params.length == 0) {
return SimpleKey.EMPTY;
}
if (params.length == 1) {
Object param = params[0];
if (param != null && !param.getClass().isArray()) {
return param;
}
}
return new SimpleKey(params);
}
让我感到困惑的是,它不考虑该方法的名称,仅考虑参数。为什么???这导致两个不同参数具有相同键的不同方法,然后在缓存中返回相同的结果!这种设计的目的是什么?
您可以在春季的github上找到答案。
这样做的主要原因是,需要为@cacheable,@cacheput和@cacheevict带注释的方法生成相同的密钥,这很可能是在不同的方法上,并且可能具有不同的bean。
。