You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么添加@EnableCaching后不配置CacheManager缓存无法正常工作?

@EnableCaching 注解的实际作用

@EnableCaching 是Spring缓存体系的功能启用注解,核心职责仅包含以下两点:

  • 导入缓存切面的核心配置类,注册CacheInterceptor、CacheOperationSource等基础组件,为@Cacheable/@CachePut/@CacheEvict等缓存注解提供AOP拦截能力
  • 标记当前应用开启缓存注解支持,框架会为标注了缓存注解的Bean生成代理对象,在方法执行前后插入缓存逻辑

它本身不负责任何CacheManager实现的实例化、配置工作。

为什么仅添加@EnableCaching不会自动创建简单缓存管理器

分两种场景说明:

纯Spring Framework(非Spring Boot)环境

Spring原生框架没有自动装配的约定逻辑,@EnableCaching 仅会完成缓存切面的基础配置,不会主动实例化任何CacheManager实现。你需要手动声明CacheManager Bean,常用的SimpleCacheManager本身设计为静态缓存管理组件,必须在初始化时显式注册所有需要用到的缓存实例,否则调用到未注册的缓存名就会抛出找不到缓存的异常。

Spring Boot 环境

Spring Boot的缓存自动配置逻辑由spring-boot-starter-cache模块提供,只有满足以下所有条件时,才会自动创建默认的ConcurrentMapCacheManager(简单内存缓存管理器):

  • 项目中引入了spring-boot-starter-cache依赖
  • 类路径下没有引入其他第三方缓存实现(如Redis、Caffeine、EhCache)
  • 项目中没有自定义的CacheManager Bean

如果不满足以上条件,框架不会自动生成简单缓存管理器。

移除@EnableCaching后现象无变化的原因

Spring Boot 2.1及以上版本中,引入spring-boot-starter-cache依赖后,框架会自动开启缓存注解支持,不需要开发者显式添加@EnableCaching注解,因此你删除该注解后不会观察到逻辑变化。

报错根因

你遇到的java.lang.IllegalArgumentException: 找不到名为'example'的缓存异常,是因为生效的CacheManager为SimpleCacheManager,该实现默认不支持动态创建缓存,必须在初始化时提前注册所有用到的缓存名称。你手动注册SimpleCacheManager并添加example缓存实例后,匹配到了缓存注解的配置要求,因此异常消失、缓存正常工作。


内容的提问来源于stack exchange,提问作者user16722881

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:15:04