spring @cacheable注解在对象内部调用不会生效

一个在方法上加上了@cacheable 注解以后,会在第一次执行的时候讲value放入缓存中,当以后有相同参数的请求再次进入时,会直接从缓存中获取值,而不会执行方法。

@Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。Spring在缓存方法的返回值时是以键值对进行缓存的,值就是方法的返回结果,至于键的话,Spring又支持两种策略,默认策略和自定义策略,这个稍后会进行说明。需要注意的是当一个支持缓存的方法在对象内部被调用时是不会触发缓存功能的(意思是在方法自身内部调用)。@Cacheable可以指定三个属性,value、key和condition。

 

@Service
public class TestServiceImpl implements TestService {
    @Override
    @Cacheable("test")
    public String get(String id) {

        System.out.println("get value by id"+ id+ System.currentTimeMillis());

        return id;
    }

    @Override
    public String getIn(String id) {
        System.out.println("get value by id"+ id+ System.currentTimeMillis());
        return id;
    }
}

  如上,当调用第一个get方法时,除了第一次,后面的调用都不会在控制台输出,第二个却会在每一次调用的时候输出,说明了对象内部调用@cacheable 不会生效

 

转载于:https://www.cnblogs.com/zhangsdml/p/9485875.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值