Как заставить работать следующее: - Spring bean, у которого есть метод, который должен кэшироваться с аннотацией @Cacheable - другой spring bean, который создает ключи для кэша (KeyCreatorBean).
Итак, код выглядит примерно так.
@Inject
private KeyCreatorBean keyCreatorBean;
@Cacheable(value = "cacheName", key = "{@keyCreatorBean.createKey, #p0}")
@Override
public List<Examples> getExamples(ExampleId exampleId) {
...
Однако приведенный выше код не работает: он дает следующее исключение:
Caused by: org.springframework.expression.spel.SpelEvaluationException:
EL1057E:(pos 2): No bean resolver registered in the context to resolve access to bean 'keyCreatorBean'
#{keyCreatorBean.method}
вместо@keyCreatorBean.method
. Просто случайное предположение. - person Ajinkya   schedule 09.07.2012<cache:annotation-driven key-generator="myKeyGenerator"/>
, но вам нужно реализоватьorg.springframework.cache.interceptor.KeyGenerator
. - person micfra   schedule 10.07.2012EvaluationContext
, используемым в базовых классах. Это было бы возможно, но только путем изменения реализацииorg.springframework.cache.interceptor.CacheAspectSupport$CacheOperationContext
, где создаетсяEvaluationContext
. Это может быть хорошей подсказкой для вашего тикета JIRA, потому что это основная причина. - person micfra   schedule 10.07.2012