我有以下情况:
- 春季 3.2
- EHCache
-
一个不能修改的超类(在 jar 内),其结构类似于:
public abstract class SuperClass<E extends Object> implements SuperIface<E> { public void insert(E entity) { } }
-
一个子类(可以修改),具有这种结构和更复杂的条件
@CacheEvict
import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; @Service @CacheEvict(value = "entityCache", allEntries = true, condition = "'insert'.equals(#root.methodName)") public class SubClass extends SuperClass<Entity> implements ISubIface { public void anotherMethod() { } }
调用SuperClass
方法时,是否有任何选择说 Spring 以使@CacheEvict
注释生效insert
?换句话说,从SubClass
实例调用insert
方法时,是否可以删除缓存条目?
请注意,我正在寻找通过配置执行此操作的方法。我知道我可以在子类中覆盖超类的方法,但在某些情况下(超类中的另一个逻辑),我宁愿不这样做。
如果无法更改源,则可以使用 xml 配置对所需的任何类创建缓存建议。
话虽如此,您的示例对我来说没有多大意义:该类是abstract
的,因此您实际上需要一个实现来调用该方法。你是说你有多个实现,并且你希望所有这些实现都具有CacheEvict
行为?如果您只有一个,我认为没有仅调用super
+注释的覆盖问题。