使用 Spring 3.2 和 EHCache 缓存超类方法



我有以下情况:

  • 春季 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 +注释的覆盖问题。

最新更新