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 不会生效

 

posted @ 2018-08-16 10:38  以写不出bug为目标  阅读(3643)  评论(0编辑  收藏  举报