如果不想使用注解,可以使用 XML 进行声明式配置缓存。所以不用注解方法的形式,而从外部指定目标方法和缓存指令(类似于声明式事务管理)。以前的例子可以转化为:
<!-- 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 behavior to all BookService interfaces -->
<aop:config>
<aop:advisor advice-ref="cacheAdvice" pointcut="execution(* x.y.BookService.*(..))"/>
</aop:config>
<!-- cache manager definition omitted -->
上面的配置中,bookService 是可配缓存的服务。在 cache:advice 指定方法 findBooks