2

我们知道 SimpleKeyGenerator 的实现如下:

@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);
}

令我困惑的是,它不考虑方法的名称,只考虑参数。为什么???这导致两个不同的方法,参数相同,key相同,然后在缓存中返回相同的结果!这种设计的目的是什么?

4

1 回答 1

1

你可以在 Spring 的 GitHub 上找到答案。

主要原因是需要为@Cacheable、@CachePut 和@CacheEvict 注解的方法生成相同的键,它们很可能在不同的方法和可能不同的bean 上。

于 2019-10-28T13:18:47.153 回答