Spring使用注释驱动缓存

一.在Spring配置文件中添加:

<cache:annotation-driven/>

等价于:

<!-- cacheManager为默认的缓存管理器名称 -->
<cache:annotation-driven cache-manager="cacheManager"/>

二.添加bean文件:cacheManager

<!-- spring自己的缓存管理器 -->
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
    <!-- 定义缓存集合caches -->
    <property name="caches">
        <set>
           <!-- ConcurrentMapCacheFactoryBean为spring提供的内存存储工厂类,定义了两个名称. -->
           <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default" />
           <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="config" /> 
        </set>
    </property>
</bean>

自己可以写适合项目的CacheManager,并定义CacheFatoryBean(如遇上了性能瓶颈,需要使用Ehcache,Redis),方便扩展。

三.在Java类中使用注释。

    1.添加缓存:

   /** 缓存config集合里的key为keyName,当满足方法参数keyName值的长度小于10时,使用缓存管理 */
    @Cacheable(value="config",key="#keyName",condition="#keyName.length()<10")

            condition为SEL(Spring Express Language).

            如果缓存没有值,通常从数据库中获取值保存在缓存中,以后调用该方法,直接从缓存中取。

            注意:value是必选项,定义了使用的缓存集合,key如果不定义时默认为方法的参数,

    2.更新缓存

    /** 调用该方法时更新config缓存集合里,key为account对象里的name的缓存 */
    @CachePut(value="config",key="#account.getName()")

    3.清空缓存

    /** 
     *  缓存config集合里的key为keyName,当满足方法参数keyName值的长度小于10时,
     *  清空缓存config集合里key为keyName的缓存,并且在为执行方法之前就执行 
     */
    @CacheEvict(value="config",key="#keyName",condition="#keyName.length()<10",beforeInvocation=true)

    /** 清空缓存config集合里的所有缓存 */
    @CacheEvict(value="config",allEntries=true)

四:它的原理就是Spring AOP ,动态代理技术。

    使用时如果需要使用缓存时,避免在方法使用this.调用,这样就不会操作缓存了。




参考:注释驱动的 Spring cache 缓存介绍


你可能感兴趣的:(spring,annotation,cache)