Тот, кто заметил в описании этого класса, полный ахтунг, тот молодец. Я оказался молодцом на пятьдесят процентов. Понял, что явно не хватает как минимум названия метода для генерации ключа и сделал свой ключ-генератор, но почему-то полностью упустил момент с ключом в виде хэшкода, поэтому основную часть генерации переложил на наследуемый класс. Какой в жопу уникальный ключ из хэшкода?! Не знаю, почему я так облажался. Возможно был подгоняем "быстреньким решением" очень "критичного бага", который "вот прямо сейчас надо сделать". А может отвлекся на уютную жежешечку.
Как бы там ни было - обосрался, хотя мои первые вопросы на собеседованиях касаются как раз equals и hashCode. Но чем люди в Spring'е думали? Они то умные должны быть. EhCache из коробки предлагает полностью корректную реализацию, а тут что за херня?
Ужас, ужас, короче. Доверяй, но проверяй. Теперь уровень моей паранойи увеличился на 18.7%.
Да, кстати, еще раз убедился, что разработчики, которые считают вопросы относительно hashCode и equals на собеседовании ниже своего достоинства, могут встать парами и идти в жопу стройными рядами.
И на десерт качество реализации hashCode() у java.lang.String:
public class TestCache
{
public static void main(String[] args)
{
System.out.println("BB".hashCode());
System.out.println("Aa".hashCode());
}
}