乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Spring使用Cache、整合Ehcache

       feimishiwo 2015-06-15

       3.1開(kāi)始,Spring引入了對(duì)Cache的支持。其使用方法和原理都類似于Spring對(duì)事務(wù)管理的支持。Spring Cache是作用在方法上的,其核心思想是這樣的:當(dāng)我們?cè)谡{(diào)用一個(gè)緩存方法時(shí)會(huì)把該方法參數(shù)和返回結(jié)果作為一個(gè)鍵值對(duì)存放在緩存中,等到下次利用同樣的參數(shù)來(lái)調(diào)用該方法時(shí)將不再執(zhí)行該方法,而是直接從緩存中獲取結(jié)果進(jìn)行返回。所以在使用Spring Cache的時(shí)候我們要保證我們緩存的方法對(duì)于相同的方法參數(shù)要有相同的返回結(jié)果。

             使用Spring Cache需要我們做兩方面的事:

      n  聲明某些方法使用緩存

      n  配置Spring對(duì)Cache的支持

             Spring對(duì)事務(wù)管理的支持一樣,Spring對(duì)Cache的支持也有基于注解和基于XML配置兩種方式。下面我們先來(lái)看看基于注解的方式。

       

      1       基于注解的支持

             Spring為我們提供了幾個(gè)注解來(lái)支持Spring Cache。其核心主要是@Cacheable@CacheEvict。使用@Cacheable標(biāo)記的方法在執(zhí)行后Spring Cache將緩存其返回結(jié)果,而使用@CacheEvict標(biāo)記的方法會(huì)在方法執(zhí)行前或者執(zhí)行后移除Spring Cache中的某些元素。下面我們將來(lái)詳細(xì)介紹一下Spring基于注解對(duì)Cache的支持所提供的幾個(gè)注解。

      1.1    @Cacheable

             @Cacheable可以標(biāo)記在一個(gè)方法上,也可以標(biāo)記在一個(gè)類上。當(dāng)標(biāo)記在一個(gè)方法上時(shí)表示該方法是支持緩存的,當(dāng)標(biāo)記在一個(gè)類上時(shí)則表示該類所有的方法都是支持緩存的。對(duì)于一個(gè)支持緩存的方法,Spring會(huì)在其被調(diào)用后將其返回值緩存起來(lái),以保證下次利用同樣的參數(shù)來(lái)執(zhí)行該方法時(shí)可以直接從緩存中獲取結(jié)果,而不需要再次執(zhí)行該方法。Spring在緩存方法的返回值時(shí)是以鍵值對(duì)進(jìn)行緩存的,值就是方法的返回結(jié)果,至于鍵的話,Spring又支持兩種策略,默認(rèn)策略和自定義策略,這個(gè)稍后會(huì)進(jìn)行說(shuō)明。需要注意的是當(dāng)一個(gè)支持緩存的方法在對(duì)象內(nèi)部被調(diào)用時(shí)是不會(huì)觸發(fā)緩存功能的。@Cacheable可以指定三個(gè)屬性,value、keycondition

      1.1.1  value屬性指定Cache名稱

             value屬性是必須指定的,其表示當(dāng)前方法的返回值是會(huì)被緩存在哪個(gè)Cache上的,對(duì)應(yīng)Cache的名稱。其可以是一個(gè)Cache也可以是多個(gè)Cache,當(dāng)需要指定多個(gè)Cache時(shí)其是一個(gè)數(shù)組。

         @Cacheable("cache1")//Cache是發(fā)生在cache1上的

         public User find(Integer id) {

            returnnull;

         }

       

         @Cacheable({"cache1", "cache2"})//Cache是發(fā)生在cache1cache2上的

         public User find(Integer id) {

            returnnull;

         }

       

      1.1.2  使用key屬性自定義key

             key屬性是用來(lái)指定Spring緩存方法的返回結(jié)果時(shí)對(duì)應(yīng)的key的。該屬性支持SpringEL表達(dá)式。當(dāng)我們沒(méi)有指定該屬性時(shí),Spring將使用默認(rèn)策略生成key。我們這里先來(lái)看看自定義策略,至于默認(rèn)策略會(huì)在后文單獨(dú)介紹。

             自定義策略是指我們可以通過(guò)SpringEL表達(dá)式來(lái)指定我們的key。這里的EL表達(dá)式可以使用方法參數(shù)及它們對(duì)應(yīng)的屬性。使用方法參數(shù)時(shí)我們可以直接使用“#參數(shù)名”或者“#p參數(shù)index”。下面是幾個(gè)使用參數(shù)作為key的示例。

         @Cacheable(value="users", key="#id")

         public User find(Integer id) {

            returnnull;

         }

       

         @Cacheable(value="users", key="#p0")

         public User find(Integer id) {

            returnnull;

         }

       

         @Cacheable(value="users", key="#user.id")

         public User find(User user) {

            returnnull;

         }

       

         @Cacheable(value="users", key="#p0.id")

         public User find(User user) {

            returnnull;

         }

       

             除了上述使用方法參數(shù)作為key之外,Spring還為我們提供了一個(gè)root對(duì)象可以用來(lái)生成key。通過(guò)該root對(duì)象我們可以獲取到以下信息。

      屬性名稱

      描述

      示例

      methodName

      當(dāng)前方法名

      #root.methodName

      method

      當(dāng)前方法

      #root.method.name

      target

      當(dāng)前被調(diào)用的對(duì)象

      #root.target

      targetClass

      當(dāng)前被調(diào)用的對(duì)象的class

      #root.targetClass

      args

      當(dāng)前方法參數(shù)組成的數(shù)組

      #root.args[0]

      caches

      當(dāng)前被調(diào)用的方法使用的Cache

      #root.caches[0].name

       

             當(dāng)我們要使用root對(duì)象的屬性作為key時(shí)我們也可以將“#root”省略,因?yàn)?/span>Spring默認(rèn)使用的就是root對(duì)象的屬性。如:

         @Cacheable(value={"users", "xxx"}, key="caches[1].name")

         public User find(User user) {

            returnnull;

         }

       

      1.1.3  condition屬性指定發(fā)生的條件

             有的時(shí)候我們可能并不希望緩存一個(gè)方法所有的返回結(jié)果。通過(guò)condition屬性可以實(shí)現(xiàn)這一功能。condition屬性默認(rèn)為空,表示將緩存所有的調(diào)用情形。其值是通過(guò)SpringEL表達(dá)式來(lái)指定的,當(dāng)為true時(shí)表示進(jìn)行緩存處理;當(dāng)為false時(shí)表示不進(jìn)行緩存處理,即每次調(diào)用該方法時(shí)該方法都會(huì)執(zhí)行一次。如下示例表示只有當(dāng)userid為偶數(shù)時(shí)才會(huì)進(jìn)行緩存。

         @Cacheable(value={"users"}, key="#user.id", condition="#user.id%2==0")

         public User find(User user) {

            System.out.println("find user by user " + user);

            return user;

         }

       

      1.2     @CachePut

             在支持Spring Cache的環(huán)境下,對(duì)于使用@Cacheable標(biāo)注的方法,Spring在每次執(zhí)行前都會(huì)檢查Cache中是否存在相同key的緩存元素,如果存在就不再執(zhí)行該方法,而是直接從緩存中獲取結(jié)果進(jìn)行返回,否則才會(huì)執(zhí)行并將返回結(jié)果存入指定的緩存中。@CachePut也可以聲明一個(gè)方法支持緩存功能。與@Cacheable不同的是使用@CachePut標(biāo)注的方法在執(zhí)行前不會(huì)去檢查緩存中是否存在之前執(zhí)行過(guò)的結(jié)果,而是每次都會(huì)執(zhí)行該方法,并將執(zhí)行結(jié)果以鍵值對(duì)的形式存入指定的緩存中。

             @CachePut也可以標(biāo)注在類上和方法上。使用@CachePut時(shí)我們可以指定的屬性跟@Cacheable是一樣的。

         @CachePut("users")//每次都會(huì)執(zhí)行方法,并將結(jié)果存入指定的緩存中

         public User find(Integer id) {

            returnnull;

         }

       

      1.3     @CacheEvict

             @CacheEvict是用來(lái)標(biāo)注在需要清除緩存元素的方法或類上的。當(dāng)標(biāo)記在一個(gè)類上時(shí)表示其中所有的方法的執(zhí)行都會(huì)觸發(fā)緩存的清除操作。@CacheEvict可以指定的屬性有value、keycondition、allEntriesbeforeInvocation。其中value、keycondition的語(yǔ)義與@Cacheable對(duì)應(yīng)的屬性類似。即value表示清除操作是發(fā)生在哪些Cache上的(對(duì)應(yīng)Cache的名稱);key表示需要清除的是哪個(gè)key,如未指定則會(huì)使用默認(rèn)策略生成的key;condition表示清除操作發(fā)生的條件。下面我們來(lái)介紹一下新出現(xiàn)的兩個(gè)屬性allEntriesbeforeInvocation

      1.3.1  allEntries屬性

             allEntriesboolean類型,表示是否需要清除緩存中的所有元素。默認(rèn)為false,表示不需要。當(dāng)指定了allEntriestrue時(shí),Spring Cache將忽略指定的key。有的時(shí)候我們需要Cache一下清除所有的元素,這比一個(gè)一個(gè)清除元素更有效率。

         @CacheEvict(value="users", allEntries=true)

         public void delete(Integer id) {

            System.out.println("delete user by id: " + id);

         }

       

      1.3.2  beforeInvocation屬性

             清除操作默認(rèn)是在對(duì)應(yīng)方法成功執(zhí)行之后觸發(fā)的,即方法如果因?yàn)閽伋霎惓6茨艹晒Ψ祷貢r(shí)也不會(huì)觸發(fā)清除操作。使用beforeInvocation可以改變觸發(fā)清除操作的時(shí)間,當(dāng)我們指定該屬性值為true時(shí),Spring會(huì)在調(diào)用該方法之前清除緩存中的指定元素。

         @CacheEvict(value="users", beforeInvocation=true)

         public void delete(Integer id) {

            System.out.println("delete user by id: " + id);

         }

       

             其實(shí)除了使用@CacheEvict清除緩存元素外,當(dāng)我們使用Ehcache作為實(shí)現(xiàn)時(shí),我們也可以配置Ehcache自身的驅(qū)除策略,其是通過(guò)Ehcache的配置文件來(lái)指定的。由于Ehcache不是本文描述的重點(diǎn),這里就不多贅述了,想了解更多關(guān)于Ehcache的信息,請(qǐng)查看我關(guān)于Ehcache的專欄

       

      1.4     @Caching

             @Caching注解可以讓我們?cè)谝粋€(gè)方法或者類上同時(shí)指定多個(gè)Spring Cache相關(guān)的注解。其擁有三個(gè)屬性:cacheable、putevict,分別用于指定@Cacheable、@CachePut@CacheEvict

         @Caching(cacheable = @Cacheable("users"), evict = { @CacheEvict("cache2"),

               @CacheEvict(value = "cache3", allEntries = true) })

         public User find(Integer id) {

            returnnull;

         }

       

      1.5     使用自定義注解

             Spring允許我們?cè)谂渲每删彺娴姆椒〞r(shí)使用自定義的注解,前提是自定義的注解上必須使用對(duì)應(yīng)的注解進(jìn)行標(biāo)注。如我們有如下這么一個(gè)使用@Cacheable進(jìn)行標(biāo)注的自定義注解。

      @Target({ElementType.TYPE, ElementType.METHOD})

      @Retention(RetentionPolicy.RUNTIME)

      @Cacheable(value="users")

      public @interface MyCacheable {

       

      }

             那么在我們需要緩存的方法上使用@MyCacheable進(jìn)行標(biāo)注也可以達(dá)到同樣的效果。

         @MyCacheable

         public User findById(Integer id) {

            System.out.println("find user by id: " + id);

            User user = new User();

            user.setId(id);

            user.setName("Name" + id);

            return user;

         }

       

      2       配置Spring對(duì)Cache的支持

      2.1     聲明對(duì)Cache的支持

      2.1.1  基于注解

             配置Spring對(duì)基于注解的Cache的支持,首先我們需要在Spring的配置文件中引入cache命名空間,其次通過(guò)<cache:annotation-driven />就可以啟用Spring對(duì)基于注解的Cache的支持。

      <?xml version="1.0" encoding="UTF-8"?>

      <beans xmlns="http://www./schema/beans"

         xmlns:xsi="http://www./2001/XMLSchema-instance"

         xmlns:cache="http://www./schema/cache"

         xsi:schemaLocation="http://www./schema/beans

           http://www./schema/beans/spring-beans-3.0.xsd

           http://www./schema/cache

           http://www./schema/cache/spring-cache.xsd">

       

         <cache:annotation-driven/>

       

      </beans>

       

             <cache:annotation-driven/>有一個(gè)cache-manager屬性用來(lái)指定當(dāng)前所使用的CacheManager對(duì)應(yīng)的bean的名稱,默認(rèn)是cacheManager,所以當(dāng)我們的CacheManageridcacheManager時(shí)我們可以不指定該參數(shù),否則就需要我們指定了。

             <cache:annotation-driven/>還可以指定一個(gè)mode屬性,可選值有proxyaspectj。默認(rèn)是使用proxy。當(dāng)modeproxy時(shí),只有緩存方法在外部被調(diào)用的時(shí)候Spring Cache才會(huì)發(fā)生作用,這也就意味著如果一個(gè)緩存方法在其聲明對(duì)象內(nèi)部被調(diào)用時(shí)Spring Cache是不會(huì)發(fā)生作用的。而modeaspectj時(shí)就不會(huì)有這種問(wèn)題。另外使用proxy時(shí),只有public方法上的@Cacheable等標(biāo)注才會(huì)起作用,如果需要非public方法上的方法也可以使用Spring Cache時(shí)把mode設(shè)置為aspectj。

             此外,<cache:annotation-driven/>還可以指定一個(gè)proxy-target-class屬性,表示是否要代理class,默認(rèn)為false。我們前面提到的@Cacheable、@cacheEvict等也可以標(biāo)注在接口上,這對(duì)于基于接口的代理來(lái)說(shuō)是沒(méi)有什么問(wèn)題的,但是需要注意的是當(dāng)我們?cè)O(shè)置proxy-target-classtrue或者modeaspectj時(shí),是直接基于class進(jìn)行操作的,定義在接口上的@CacheableCache注解不會(huì)被識(shí)別到,那對(duì)應(yīng)的Spring Cache也不會(huì)起作用了。

             需要注意的是<cache:annotation-driven/>只會(huì)去尋找定義在同一個(gè)ApplicationContext下的@Cacheable等緩存注解。

       

      2.1.2  基于XML配置

             除了使用注解來(lái)聲明對(duì)Cache的支持外,Spring還支持使用XML來(lái)聲明對(duì)Cache的支持。這主要是通過(guò)類似于aop:advicecache:advice來(lái)進(jìn)行的。在cache命名空間下定義了一個(gè)cache:advice元素用來(lái)定義一個(gè)對(duì)于Cacheadvice。其需要指定一個(gè)cache-manager屬性,默認(rèn)為cacheManagercache:advice下面可以指定多個(gè)cache:caching元素,其有點(diǎn)類似于使用注解時(shí)的@Caching注解。cache:caching元素下又可以指定cache:cacheablecache:cache-putcache:cache-evict元素,它們類似于使用注解時(shí)的@Cacheable@CachePut@CacheEvict。下面來(lái)看一個(gè)示例:

         <cache:advice id="cacheAdvice" cache-manager="cacheManager">

            <cache:caching cache="users">

               <cache:cacheable method="findById" key="#p0"/>

               <cache:cacheable method="find" key="#user.id"/>

               <cache:cache-evict method="deleteAll" all-entries="true"/>

            </cache:caching>

         </cache:advice>

       

             上面配置定義了一個(gè)名為cacheAdvicecache:advice,其中指定了將緩存findById方法和find方法到名為users的緩存中。這里的方法還可以使用通配符“*”,比如“find*”表示任何以“find”開(kāi)始的方法。

             有了cache:advice之后,我們還需要引入aop命名空間,然后通過(guò)aop:config指定定義好的cacheAdvice要應(yīng)用在哪些pointcut上。如:

         <aop:config proxy-target-class="false">

            <aop:advisor advice-ref="cacheAdvice" pointcut="execution(* com.xxx.UserService.*(..))"/>

         </aop:config>

             上面的配置表示在調(diào)用com.xxx.UserService中任意公共方法時(shí)將使用cacheAdvice對(duì)應(yīng)的cache:advice來(lái)進(jìn)行Spring Cache處理。更多關(guān)于Spring Aop的內(nèi)容不在本文討論范疇內(nèi)。

       

      2.2     配置CacheManager

             CacheManagerSpring定義的一個(gè)用來(lái)管理Cache的接口。Spring自身已經(jīng)為我們提供了兩種CacheManager的實(shí)現(xiàn),一種是基于Java APIConcurrentMap,另一種是基于第三方Cache實(shí)現(xiàn)——Ehcache,如果我們需要使用其它類型的緩存時(shí),我們可以自己來(lái)實(shí)現(xiàn)SpringCacheManager接口或AbstractCacheManager抽象類。下面分別來(lái)看看Spring已經(jīng)為我們實(shí)現(xiàn)好了的兩種CacheManager的配置示例。

      2.2.1  基于ConcurrentMap的配置

         <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">

            <property name="caches">

               <set>

                  <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="xxx"/>

               </set>

            </property>

         </bean>

             上面的配置使用的是一個(gè)SimpleCacheManager,其中包含一個(gè)名為“xxx”的ConcurrentMapCache。

       

      2.2.2  基于Ehcache的配置

         <!-- Ehcache實(shí)現(xiàn) -->

         <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcacheManager"/>

         <bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:config-location="ehcache-spring.xml"/>

             上面的配置使用了一個(gè)Spring提供的EhCacheCacheManager來(lái)生成一個(gè)SpringCacheManager,其接收一個(gè)EhcacheCacheManager,因?yàn)檎嬲脕?lái)存入緩存數(shù)據(jù)的還是Ehcache。EhcacheCacheManager是通過(guò)Spring提供的EhCacheManagerFactoryBean來(lái)生成的,其可以通過(guò)指定ehcache的配置文件位置來(lái)生成一個(gè)EhcacheCacheManager。若未指定則將按照Ehcache的默認(rèn)規(guī)則取classpath根路徑下的ehcache.xml文件,若該文件也不存在,則獲取Ehcache對(duì)應(yīng)jar包中的ehcache-failsafe.xml文件作為配置文件。更多關(guān)于Ehcache的內(nèi)容這里就不多說(shuō)了,它不屬于本文討論的內(nèi)容,欲了解更多關(guān)于Ehcache的內(nèi)容可以參考我之前發(fā)布的Ehcache系列文章,也可以參考官方文檔等

       

      3       鍵的生成策略

             鍵的生成策略有兩種,一種是默認(rèn)策略,一種是自定義策略。

      3.1     默認(rèn)策略

             默認(rèn)的key生成策略是通過(guò)KeyGenerator生成的,其默認(rèn)策略如下:

      n  如果方法沒(méi)有參數(shù),則使用0作為key

      n  如果只有一個(gè)參數(shù)的話則使用該參數(shù)作為key。

      n  如果參數(shù)多余一個(gè)的話則使用所有參數(shù)的hashCode作為key。

       

             如果我們需要指定自己的默認(rèn)策略的話,那么我們可以實(shí)現(xiàn)自己的KeyGenerator,然后指定我們的Spring Cache使用的KeyGenerator為我們自己定義的KeyGenerator

             使用基于注解的配置時(shí)是通過(guò)cache:annotation-driven指定的.

         <cache:annotation-driven key-generator="userKeyGenerator"/>

        

         <bean id="userKeyGenerator" class="com.xxx.cache.UserKeyGenerator"/>

       

             而使用基于XML配置時(shí)是通過(guò)cache:advice來(lái)指定的。

         <cache:advice id="cacheAdvice" cache-manager="cacheManager" key-generator="userKeyGenerator">

         </cache:advice>

       

             需要注意的是此時(shí)我們所有的Cache使用的Key的默認(rèn)生成策略都是同一個(gè)KeyGenerator。

      3.2     自定義策略

             自定義策略是指我們可以通過(guò)SpringEL表達(dá)式來(lái)指定我們的key。這里的EL表達(dá)式可以使用方法參數(shù)及它們對(duì)應(yīng)的屬性。使用方法參數(shù)時(shí)我們可以直接使用“#參數(shù)名”或者“#p參數(shù)index”。下面是幾個(gè)使用參數(shù)作為key的示例。

         @Cacheable(value="users", key="#id")

         public User find(Integer id) {

            returnnull;

         }

       

         @Cacheable(value="users", key="#p0")

         public User find(Integer id) {

            returnnull;

         }

       

         @Cacheable(value="users", key="#user.id")

         public User find(User user) {

            returnnull;

         }

       

         @Cacheable(value="users", key="#p0.id")

         public User find(User user) {

            returnnull;

         }

       

             除了上述使用方法參數(shù)作為key之外,Spring還為我們提供了一個(gè)root對(duì)象可以用來(lái)生成key。通過(guò)該root對(duì)象我們可以獲取到以下信息。

      屬性名稱

      描述

      示例

      methodName

      當(dāng)前方法名

      #root.methodName

      method

      當(dāng)前方法

      #root.method.name

      target

      當(dāng)前被調(diào)用的對(duì)象

      #root.target

      targetClass

      當(dāng)前被調(diào)用的對(duì)象的class

      #root.targetClass

      args

      當(dāng)前方法參數(shù)組成的數(shù)組

      #root.args[0]

      caches

      當(dāng)前被調(diào)用的方法使用的Cache

      #root.caches[0].name

       

             當(dāng)我們要使用root對(duì)象的屬性作為key時(shí)我們也可以將“#root”省略,因?yàn)?/span>Spring默認(rèn)使用的就是root對(duì)象的屬性。如:

         @Cacheable(value={"users", "xxx"}, key="caches[1].name")

         public User find(User user) {

            returnnull;

         }

       

      4       Spring單獨(dú)使用Ehcache

             前面介紹的內(nèi)容是Spring內(nèi)置的對(duì)Cache的支持,其實(shí)我們也可以通過(guò)Spring自己?jiǎn)为?dú)的使用EhcacheCacheManagerEhcache對(duì)象。通過(guò)在Application Context中配置EhCacheManagerFactoryBeanEhCacheFactoryBean,我們就可以把對(duì)應(yīng)的EhCacheCacheManagerEhcache對(duì)象注入到其它的Spring bean對(duì)象中進(jìn)行使用。

       

      4.1     EhCacheManagerFactoryBean

           EhCacheManagerFactoryBeanSpring內(nèi)置的一個(gè)可以產(chǎn)生EhcacheCacheManager對(duì)象的FactoryBean。其可以通過(guò)屬性configLocation指定用于創(chuàng)建CacheManagerEhcache配置文件的路徑,通常是ehcache.xml文件的路徑。如果沒(méi)有指定configLocation,則將使用默認(rèn)位置的配置文件創(chuàng)建CacheManager,這是屬于Ehcache自身的邏輯,即如果在classpath根路徑下存在ehcache.xml文件,則直接使用該文件作為Ehcache的配置文件,否則將使用ehcache-xxx.jar中的ehcache-failsafe.xml文件作為配置文件來(lái)創(chuàng)建EhcacheCacheManager。此外,如果不希望創(chuàng)建的CacheManager使用默認(rèn)的名稱(在ehcache.xml文件中定義的,或者是由CacheManager內(nèi)部定義的),則可以通過(guò)cacheManagerName屬性進(jìn)行指定。下面是一個(gè)配置EhCacheManagerFactoryBean的示例。

         <!-- 定義CacheManager -->

         <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

            <!-- 指定配置文件的位置 -->

            <property name="configLocation" value="/WEB-INF/config/ehcache.xml"/>

            <!-- 指定新建的CacheManager的名稱 -->

            <property name="cacheManagerName" value="cacheManagerName"/>

         </bean>

       

      4.2     EhCacheFactoryBean

             EhCacheFactoryBean是用來(lái)產(chǎn)生EhcacheEhcache對(duì)象的FactoryBean。定義EhcacheFactoryBean時(shí)有兩個(gè)很重要的屬性我們可以來(lái)指定。一個(gè)是cacheManager屬性,其可以指定將用來(lái)獲取或創(chuàng)建EhcacheCacheManager對(duì)象,若未指定則將通過(guò)CacheManager.create()獲取或創(chuàng)建默認(rèn)的CacheManager。另一個(gè)重要屬性是cacheName,其表示當(dāng)前EhCacheFactoryBean對(duì)應(yīng)的是CacheManager中的哪一個(gè)Ehcache對(duì)象,若未指定默認(rèn)使用beanName作為cacheName。若CacheManager中不存在對(duì)應(yīng)cacheNameEhcache對(duì)象,則將使用CacheManager創(chuàng)建一個(gè)名為cacheNameCache對(duì)象。此外我們還可以通過(guò)EhCacheFactoryBeantimeToIdle、timeToLive等屬性指定要?jiǎng)?chuàng)建的Cache的對(duì)應(yīng)屬性,注意這些屬性只對(duì)CacheManager中不存在對(duì)應(yīng)Cache時(shí)新建的Cache才起作用,對(duì)已經(jīng)存在的Cache將不起作用,更多屬性設(shè)置請(qǐng)參考SpringAPI文檔。此外還有幾個(gè)屬性是對(duì)不管是已經(jīng)存在還是新創(chuàng)建的Cache都起作用的屬性:statisticsEnabled、sampledStatisticsEnabled、disabled、blockingcacheEventListeners,其中前四個(gè)默認(rèn)都是false,最后一個(gè)表示為當(dāng)前Cache指定CacheEventListener。下面是一個(gè)定義EhCacheFactoryBean的示例。

         <!-- 定義CacheManager -->

         <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

            <!-- 指定配置文件的位置 -->

            <property name="configLocation" value="/WEB-INF/config/ehcache.xml"/>

            <!-- 指定新建的CacheManager的名稱 -->

            <property name="cacheManagerName" value="cacheManagerName"/>

         </bean>

        

         <!-- 定義一個(gè)Ehcache -->

         <bean id="userCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">

            <property name="cacheName" value="user"/>

            <property name="cacheManager" ref="cacheManager"/>

         </bean>

       

      (注:本文是基于Spring3.1.0所寫(xiě))

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多