一.场景
场景1:
getCache使用@Cacheable注解进行缓存配置
通过service注入对象直接调用getCache方法
场景2:
service新增showcache方法,本地调用getCache()方法
场景3:
通过companyService注入对象调用getComCache()方法
二.现象
现象1:
@Cacheable缓存成功:首次进入方法,未使用缓存,第二次成功调用缓存,未进入方法体
现象2:
@Cacheable缓存失效:两次均进入了方法,未使用缓存
现象3:
@Cacheable缓存成功:首次进入方法,未使用缓存,第二次成功调用缓存,未进入方法体
三.结论
@Cacheable原理为SpringAop,执行aop拦截时是使用依赖注入的代理对象执行拦截方法,所以需要使用IOC依赖注入的对象调用method,才能使AOP生效,从而使用缓存
四.扩展
@Transactional事务、自定义AOP注解等均需要注意同类问题,需要通过IOC对象进行方法调用才能进入AOP切面切点方法。