> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v4/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v4/untitled-7/untitled.md).

# 13.4　小结

如果想让应用程序避免一遍遍地为同一个问题推导、计算或查询答案的话，缓存是一种很棒的方式。当以一组参数第一次调用某个方法时，返回值会被保存在缓存中，如果这个方法再次以相同的参数进行调用时，这个返回值会从缓存中查询获取。在很多场景中，从缓存查找值会比其他的方式（比如，执行数据库查询）成本更低。因此，缓存会对应用程序的性能带来正面的影响。

在本章中，我们看到了如何在 Spring 应用中声明缓存。首先，看到的是如何声明一个或更多的 Spring 缓存管理器。然后，将缓存用到了 Spittr 应用程序中，这是通过将 @Cacheable、@CachePut 和 @CacheEvict 添加到 SpittleRepository 上实现的。

我们还看到了如何借助 XML 将缓存规则的配置与应用程序代码分离开来。\<cache:cacheable>、\<cache:cache-put> 和 \<cache:cache-evict> 元素的作用与本章前面所使用的注解是一致的。

在这个过程中，我们讨论了缓存实际上是一种面向切面的行为。Spring 将缓存实现为一个切面。在使用 XML 声明缓存规则时，这一点非常明显：我们必须要将缓存通知绑定到一个切点上。

Spring 在将安全功能应用到方法上时，同样使用了切面。在下一章中，我们将会看到如何借助 Spring Security 确保 bean 方法的安全性。
