spring2.5以前是用第三方的EHCache,现在3.1开始原生支持了,以下是配置文件
<cache:annotation-driven cache-manager="cacheManager"/>
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">  
        <property name="caches">  
            <set>  
                <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"   p:name="default" />  
                <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="useCache" />  
            </set>  
        </property>  
</bean>
使用的时候在方法上调用@Cacheable就可以使用了,现在关键是value值需要指定放在哪个缓存里面,而XML配置文件里面目前配置了default和useCache两个,我想请问下如果管理多个,比如像以前的EHCache一样,专门用一个XML文件来管理,然后spring住配置文件里面引用那个XML就可以了,现在spring3.1原生支持的这种,也可以那样配置吗?求方法。

解决方案 »

  1.   

    SimpleCacheManager 就是个非常简单的缓存,啥配置都没有,还有必要放到另外的配置文件里么?
    你如果要更简单点,可以用 ConcurrentMapCacheManager,不用定义缓存名了。用到的时候自动带你new出来。
    <bean id="cacheManager" class="org.springframework.cache.concurrent.ConcurrentMapCacheManager" />   
      

  2.   


    spring3.1自带的那个,用的时候整个项目里面可以是同一个value?不用分开管理吗?
      

  3.   

    ConcurrentMapCacheManager你用到2个,它就帮你创建2个。具体看源码就清楚了。不需要像SimpleCacheManager那样必须指定你要用的cache name。@Cacheable(value="books")@Cacheable(value="music")
      

  4.   

    你意思是不用预先在XML里面定义好两个,而是注解的时候直接使用就OK了?
    <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default" />  
      <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="useCache" /> 
    这两个bean可以不用写?
      

  5.   


    那我刚开始发的XML,要改成什么样?可以发下配置文件吗?注解使用的时候,是跟原来一样吧?
      

  6.   

    道理像action差不多,不用每个action都在配置文件里面配一下,只需要配一下扫描的包,路径,用到的时候spring自己就去加载了。
    这个缓存对象也是,注解一下,其实和在配置文件里配置是一样的,只是用注解更方便,不用在配置文件里写那么多东西。