Spring documentation给出了如何从参数之一计算自定义 key 的示例:
@Cacheable(value="book", key="isbn")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
但是,如果我需要根据多个参数计算 key 怎么办?例如在
@Cacheable(value="book", key="???")
public Book findBook(String author, String title,
boolean checkWarehouse, boolean includeUsed)
我如何从author
和title
计算 key ?到目前为止,我想出了丑陋的解决方案,例如
author.hashCode() + 31 * title.hashCode()
或者我可以创建一个外部辅助函数,例如
public static int hashes(Object... args) {
return java.util.Arrays(args).asList().hashCode();
}
并将其命名为key="T(mypackage.MyHelperClass).hashes(author, title)"
。但它仍然远非优雅。
(在我看来,如果@Cacheable
有String[] key
而不是String key
,那就更容易了。对于默认键,Spring 无论如何都必须将多个哈希合并为一个。)
最佳答案
如果您使用的是 JDK 1.7,您可能可以执行以下操作:
@Cacheable(value="book", key="T(java.util.Objects).hash(#p0,#p1)")
public Book findBook(String author, String title,
boolean checkWarehouse, boolean includeUsed)
关于java - 如何在 Spring 3.1 中从多个参数生成自定义键以进行缓存抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13607279/