java – Ehcache自动生成密钥和@Cacheable弹簧注释

有没有人知道Ehcache的认密钥生成是如何工作的?如果我有以下方法
@Cacheable(cacheName = CACHE_KEY) // CACHE_KEY is static final field.
public List<DataObject> list(
    int firstRecord,int maxRecords,int pageSize,FilterObject filter) {
    ....
}

其中FilterObject是一个自定义的POJO,我应该期望什么是实际的缓存键?

我观察到的是当使用不同的FilterObject实例而不改变我的方法调用的其他参数时,它总是产生相同的结果 – 第一个调用的结果被缓存并返回.

可能是导致该行为的FilterObject POJO – 我想这是一些序列化或.toString()问题,因为我没有覆盖相关的方法.

仍然我无法找到关于如何在Ehcache的网站和@Cacheable注释文档中形成这种方法的缓存键的确切信息.
我非常感谢任何关于这个话题的信息和建议.

解决方法

这是认的键生成
public class DefaultKeyGenerator implements KeyGenerator {

public static final int NO_ParaM_KEY = 0;
public static final int NULL_ParaM_KEY = 53;

public Object generate(Object target,Method method,Object... params) {
    if (params.length == 1) {
        return (params[0] == null ? NULL_ParaM_KEY : params[0]);
    }
    if (params.length == 0) {
        return NO_ParaM_KEY;
    }
    int hashCode = 17;
    for (Object object : params) {
        hashCode = 31 * hashCode + (object == null ? NULL_ParaM_KEY : object.hashCode());
    }
    return Integer.valueOf(hashCode);
}

}

您可以看到,它组合了每个方法参数的哈希码.

相关文章

应用场景 C端用户提交工单、工单创建完成之后、会发布一条工...
线程类,设置有一个公共资源 package cn.org.chris.concurre...
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量