Spring 文档提供了一个示例,如何根据其中一个参数计算自定义键:
@Cacheable(value="book", key="isbn")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
但是,如果我需要从多个参数计算密钥怎么办?例如在
@Cacheable(value="book", key="???")
public Book findBook(String author, String title,
boolean checkWarehouse, boolean includeUsed)
author
我将如何从和计算密钥title
?到目前为止,我想出了丑陋的解决方案,例如
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 无论如何都必须将多个散列组合成一个。)