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

私を混乱させているのは、メソッドの名前を考慮せず、パラメーターのみを考慮していることです。どうして???これにより、同じパラメーターを持つ 2 つの異なるメソッドが同じキーを持ち、同じ結果がキャッシュに返されます。このデザインの目的は何ですか?

4

1 に答える 1

1

Spring の GitHub で答えを見つけることができます。

これの主な理由は、@Cacheable、@CachePut、および @CacheEvict アノテーション付きメソッドに対して同じキーを生成する必要があるためです。これは、おそらく異なるメソッドであり、異なる Bean である可能性があります。

于 2019-10-28T13:18:47.153 に答える