zoukankan      html  css  js  c++  java
  • 介绍 Spring 3.1 M1 中的缓存功能

    该版本最酷的新特性就是引入全方位的缓存支持。Spring 3.1 提供了对已有的 Spring 应用增加缓存的支持,这个特性对应用本身来说是透明的,通过缓存抽象层,使得对已有代码的影响降低到最小。

    该缓存机制针对于 Java 的方法,通过给定的一些参数来检查方法是否已经执行,Spring 将对执行结果进行缓存,而无需再次执行方法。

    可通过下列配置来启用缓存的支持(注意使用新的schema):

    1. <beans xmlns="http://www.springframework.org/schema/beans"   
    2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"   
    3.      xmlns:cache="http://www.springframework.org/schema/cache"   
    4.     xsi:schemaLocation="   
    5.             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd   
    6.             http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">   
    7.   
    8.     <cache:annotation-driven />  
    9. </beans>  

    接下来可使用 @Cacheable 和 @CacheEvict 来对缓存进行操作。

    1. @Cacheable("persons")  
    2. public Person profile(Long personId) { ... }  

    以上代码声明了一个名为 persons 的缓存区域,当调用该方法时,Spring 会检查缓存中是否存在 personId 对应的值。

    也可以指定多个缓存区域,当你在应用有需要这样做的话:

    1. @Cacheable({"persons", "profiles"})  
    2. public Person profile(Long personId) { ... }  

    当指定多个区域时,Spring 会一个个的检查,一旦某个区域存在指定值时则返回。

    而 @CacheEvict 则用来从缓存中清除数据,例如:

    1. @CacheEvict (value = "persons", allEntries=true)  
    2. public List<Person> listPersons()  

    @CacheEvict 可以指定清除缓存的条件。

    还可以指定缓存的Key:

    1. @Cacheable(value="persons", key="personId")  
    2. public Person profile(Long personId, Long groundId) { ... }  

    或者根据条件决定是否缓存:

    1. @Cacheable(value="persons", condition="personId > 50")  
    2. public Person profile(Long personId) { ... }  

    缓存管理器的配置:

    1. <!-- generic cache manager -->  
    2. <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">  
    3.   <property name="caches">  
    4.     <set>  
    5.       <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default"/>  
    6.       <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="persons"/>  
    7.     </set>  
    8.   </property>  
    9. </bean>  

    基于 Ehcache 缓存的配置:

    1. <bean id="cacheManager" class="org.springframework.cache.ehcache.EhcacheCacheManager" p:cache-manager="ehcache"/>  
    2.    
    3. <!-- Ehcache library setup -->  
    4. <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"  
    1.    
    1.    
  • 相关阅读:
    Codeforces Round #650 (Div. 3)
    C. Count Triangles
    A National Pandemic (思维 + 树链剖分模版)
    扫描线专题
    扫描线模版
    莫队模版
    JS设计模式 -- 4种创建型模式
    滑动窗口的最大值 -- 单调队列
    JS链表实现栈和队列
    js数组扁平化的几种实现方式
  • 原文地址:https://www.cnblogs.com/chenying99/p/2709040.html
Copyright © 2011-2022 走看看