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
註釋不是可用選項。