0

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[] keyString key

4

2 に答える 2

1

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)
于 2012-11-28T14:56:55.387 に答える