java – Ehcache自动生成密钥和@Cacheable弹簧注释
发布时间:2020-12-15 00:00:41 所属栏目:Java 来源:网络整理
导读:有没有人知道Ehcache的默认密钥生成是如何工作的?如果我有以下方法: @Cacheable(cacheName = CACHE_KEY) // CACHE_KEY is static final field.public ListDataObject list( int firstRecord,int maxRecords,int pageSize,FilterObject filter) { ....} 其
有没有人知道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); } } 您可以看到,它组合了每个方法参数的哈希码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |