2
在某些代码中,有一个带有可缓存弹簧注释的接口方法。我有一个正在改变这种方法的类的装饰器。代码基本上是防止特定类的Spring缓存
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
然后第一次高兴地返回修改后的小部件。
在第二呼叫弹簧看到的Foo.doit()
调用(这实际上是FooDecorator.doit()
)并返回它已经高速缓存的对象(它们是不正确地从StandardFoo.doit()
的值)。
所以我想要做的是在某处添加配置,告诉Spring/Ehcache只缓存DecoratedFoo
的值或不缓存其他实现返回的值。
请注意,从接口中删除@Cacheable
注释不是可用选项。