После обновления нашей весны до версии 4 наш генератор пользовательских ключей перестал работать. До миграции наш код, переопределяющий метод «генерировать», выполнялся, но после перехода на spring 4.0.5 код вообще не выполняется. Вместо этого я увидел, что SimpleKeyGenerator всегда выполняется. Это баг весной? Почему я не могу переопределить метод generate своим собственным кодом, как это было в предыдущих версиях?
пример из корневого контекста:
<cache:annotation-driven key-generator="cacheKeyGenerator" />
<bean id="cacheKeyGenerator" class="com.poalim.xp.general.cache.CacheKeyGenerator"/>
образец из генерации ключа Java (до миграции)
public class CacheKeyGenerator extends DefaultKeyGenerator implements ApplicationContextAware {
public Object generate(Object target, Method method, Object... params) {
return method.getName() + super.generate(target, method, params);
}
}
пример кода после миграции
public class CacheKeyGenerator extends SimpleKeyGenerator implements ApplicationContextAware {
public Object generate(Object target, Method method, Object... params) {
return method.getName() + super.generate(target, method, params);
}
}
Дополнительная информация: после отладки кода я увидел, что каждый раз, когда вызывается метод «сгенерировать», он выполняется ТОЛЬКО в SimpleKeyGenerator, а НЕ в моем пользовательском классе CacheKeyGenerator. Я попытался понять, почему, поэтому я сделал некоторую отладку. Во время отладки я увидел, что есть класс org.springframework.cache.interceptor.CacheAspectSupport, который имеет приватное свойство: private KeyGenerator keyGenerator = new SimpleKeyGenerator(); Этот класс имеет метод установки для свойства keyGenerator, и я видел, что при запуске контекста этот метод установки вызывается с моим пользовательским CacheKeyGenerator, поэтому я делаю вывод, что моя конфигурация правильная и проблема не в конфигурации. Я также видел, что когда требуется генерация ключей, свойство keyGenerator «теряет» значение «CacheKeyGenerator» и имеет «SimpleKeyGenerator». Это объясняет, почему мой пользовательский код никогда не выполняется, но я не понимаю, почему свойство keyGenerator указывает на SimpleKeyGenerator. Это похоже на SPring BUG. В чем проблема?