有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么Spring密钥生成器不考虑Spring缓存机制中的方法名称

我们知道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);
}

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


共 (1) 个答案

  1. # 1 楼答案

    您可以在Spring的GitHub上找到answer

    The primary reason for this is that the same key needs to be generated for @Cacheable, @CachePut and @CacheEvict annotated method, which will most likely be on different methods and potentially different beans.