Spring のドキュメントには、引数の 1 つからカスタム キーを計算する方法の例が示されています。
@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
あった方が簡単に思えます。デフォルトのキーの場合、Spring はとにかく複数のハッシュを 1 つに結合する必要があります。)String[] key
String key