【譯】Spring的@EnableCaching註解

Spring的@EnableCaching註解

@EnableCaching註解是spring framework中的註解驅動的緩存管理功能。自spring版本3.1起加入了該註解。若是你使用了這個註解,那麼你就不須要在XML文件中配置cache manager了。java

當你在配置類(@Configuration)上使用@EnableCaching註解時,會觸發一個post processor,這會掃描每個spring bean,查看是否已經存在註解對應的緩存。若是找到了,就會自動建立一個代理攔截方法調用,使用緩存的bean執行處理。spring

若是你對緩存感興趣並想了解更多,請閱讀spring caching. 本文會幫助你瞭解如何使用@EnableCaching註解。緩存

接下來的例子演示了@EnableCaching的用法。在代碼中,我緩存了Book類找那個的方法。post

代碼

//Book.java
import org.springframework.cache.annotation.Cacheable;
public class Book {
    @Cacheable(value = { "sampleCache" })
    public String getBook(int id) {
        System.out.println("Method executed..");
        if (id == 1) {
            return "Book 1";
        } else {
            return "Book 2";
        }
    }
}

//CachingConfig.java
import java.util.Arrays;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.concurrent.ConcurrentMapCache;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableCaching
public class CachingConfig {
    @Bean
    public Book book() {
        return new Book();
    }

    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("sampleCache")));
        return cacheManager;
    }
}

上面的java config和下面的xml配置文件是等效的:.net

<beans>
     <cache:annotation-driven/>
     <bean id="book" class="Book"/>
     <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
         <property name="caches">
             <set>
                 <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
                     <property name="name" value="sampleCache"/>
                 </bean>
             </set>
         </property>
     </bean>
 </beans>
//EnableCachingAnnotationExample.java

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class EnableCachingAnnotationExample {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); 
        ctx.register(CachingConfig.class);
        ctx.refresh();
        Book book = ctx.getBean(Book.class);        
        // calling getBook method first time.
        System.out.println(book.getBook(1));
        // calling getBook method second time. This time, method will not
        // execute.
        System.out.println(book.getBook(1));
        // calling getBook method third time with different value.
        System.out.println(book.getBook(2));
        ctx.close();
    }
}

會獲得以下的輸出代理

Method executed..
Book 1
Book 1
Method executed..
Book 2
相關文章
相關標籤/搜索