В некотором коде есть интерфейсный метод с пружинной кешируемой аннотацией.У меня есть декоратор класса, который изменяет этот метод.Код в основном
interface Foo {
@Cacheable
Widget doit();
}
class StandardFoo implements Foo {
public Widget doit();
}
class FooDecorator implements Foo {
Foo decorated;
public Widget doit() {
Widget = decorated.doit();
..some fun stuff
return new SlightlyDifferentWidget();
}
}
Моя проблема заключается в том, что во время цепочки вызовов вызывается декоратор, а затем вызывается декорированный объект.Spring (или Ehcache) затем решает кэшировать объекты, возвращаемые декорированным экземпляром.FooDecorator
затем с радостью возвращает измененный виджет в первый раз.
При втором вызове Spring видит вызов Foo.doit()
(который на самом деле FooDecorator.doit()
) и возвращает объекты, которые он кэшировал (которые невернызначения из StandardFoo.doit()
).
Итак, я хотел бы добавить конфигурацию где-нибудь, которая сообщает Spring / Ehcache только кэшировать значения из DecoratedFoo
или не кэшировать значение, возвращенное другой реализацией.
Обратите внимание, что удаление аннотации @Cacheable
из интерфейса недоступно.