Spring Cache 不适用于抽象类
我试图在抽象类中使用Spring Cache,但它不起作用,因为从我所看到的,Spring正在抽象类上搜索CacheNames。我有一个使用服务层和道层的REST API。这个想法是为每个子类使用不同的缓存名称。
我的抽象服务类如下所示:
@Service
@Transactional
public abstract class AbstractService<E> {
...
@Cacheable
public List<E> findAll() {
return getDao().findAll();
}
}
抽象类的扩展将如下所示:
@Service
@CacheConfig(cacheNames = "textdocuments")
public class TextdocumentsService extends AbstractService<Textdocuments> {
...
}
因此,当我使用此代码启动应用程序时,Spring会给我以下异常:
Caused by: java.lang.IllegalStateException: No cache names could be detected on 'public java.util.List foo.bar.AbstractService.findAll()'. Make sure to set the value parameter on the annotation or declare a @CacheConfig at the class-level with the default cache name(s) to use.
at org.springframework.cache.annotation.SpringCacheAnnotationParser.validateCacheOperation(SpringCacheAnnotationParser.java:240) ~[spring-context-4.1.6.RELEASE.jar:?]
我认为发生这种情况是因为Spring正在抽象类上搜索CacheName,尽管它是在子类上声明的。
尝试使用
@Service
@Transactional
@CacheConfig
public abstract class AbstractService<E> {
}
导致相同的例外;用
@Service
@Transactional
@CacheConfig(cacheNames = "abstractservice")
public abstract class AbstractService<E> {
}
没有例外,但随后Spring Cache为每个子类使用相同的缓存名称,并忽略子类上定义的缓存名称。有什么想法可以解决这个问题吗?