我可以使用Spring';没有注释的缓存功能?

我可以使用Spring';没有注释的缓存功能?,spring,caching,configuration,annotations,ehcache,Spring,Caching,Configuration,Annotations,Ehcache,我正在开发一个我计划用来处理的模块。我使用缓存编写了许多方法 @Override @Cacheable("businessUnitCache") public BusinessUnit getBusinessUnit(String businessUnitId){ 我计划提供一个类路径bean文件和类路径来提供功能,而不需要使用项目来了解我的实现的内部结构以及需要缓存哪些方法(其中许多方法他们永远不会直接访问) 然而,阅读问题及其答案显然会导致一个问题,因为任何使用SpringCache注释的

我正在开发一个我计划用来处理的模块。我使用缓存编写了许多方法

@Override
@Cacheable("businessUnitCache")
public BusinessUnit getBusinessUnit(String businessUnitId){
我计划提供一个类路径bean文件和类路径来提供功能,而不需要使用项目来了解我的实现的内部结构以及需要缓存哪些方法(其中许多方法他们永远不会直接访问)

然而,阅读问题及其答案显然会导致一个问题,因为任何使用SpringCache注释的项目都会使用SpringCache注释。我希望,如果没有与注释匹配的已声明缓存,Sprint将无声地失败,但它失败了,并出现了以下错误:

java.lang.IllegalArgumentException:找不到CacheableOperation[public]的名为[businessUnitCache]的缓存

让我得出结论,我不能使用缓存注释(这与我从问题中得出的原始结论相冲突。我的测试支持这一点)


因此:是否可以将缓存与实现类分开声明,最好是使用xml?这将允许我准备一个包含缓存规则的附加文件,并使用标准spring属性替换替换缓存管理器名称(我已经在对数据源做类似的操作)?遗憾的是,本文仅描述了基于注释的配置。

您可以使用xml文件配置缓存,请参阅spring参考手册:


查看文档的
/current/
版本会有所帮助,但不幸的是,谷歌通常不会将您链接到那里。
<!-- the service we want to make cacheable -->
<bean id="bookService" class="x.y.service.DefaultBookService"/>

<!-- cache definitions -->
<cache:advice id="cacheAdvice" cache-manager="cacheManager">
<cache:caching cache="books">
    <cache:cacheable method="findBook" key="#isbn"/>
    <cache:cache-evict method="loadBooks" all-entries="true"/>
</cache:caching>
</cache:advice>  

<!-- apply the cacheable behaviour to all BookService interfaces -->
<aop:config>
<aop:advisor advice-ref="cacheAdvice" pointcut="execution(* x.y.BookService.*(..))"/>
</aop:config>