commit
						e4a301dd99
					
				| @ -0,0 +1,6 @@ | ||||
| 
 | ||||
| @Configuration | ||||
| @EnableCaching | ||||
| public class MyAppConfig { | ||||
|     // Your configuration code goes here. | ||||
| } | ||||
| @ -0,0 +1,39 @@ | ||||
| 
 | ||||
| public class Customer { | ||||
| 
 | ||||
|     private int id; | ||||
|     private String name; | ||||
|     private String customerAddress; | ||||
| 
 | ||||
|     public Customer(){ | ||||
|     } | ||||
| 
 | ||||
|     Customer(String name, String address){ | ||||
|         this.name = name; | ||||
|         this.customerAddress = address; | ||||
|     } | ||||
| 
 | ||||
|     public int getId() { | ||||
|         return id; | ||||
|     } | ||||
| 
 | ||||
|     public void setId(int id) { | ||||
|         this.id = id; | ||||
|     } | ||||
| 
 | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|      | ||||
|     public void setName(String name) { | ||||
|         this.name = name; | ||||
|     } | ||||
| 
 | ||||
|     public String getCustomerAddress() { | ||||
|         return this.customerAddress; | ||||
|     } | ||||
| 
 | ||||
|     public void setCustomerAddress(String address) { | ||||
|         this.customerAddress = this.name + "," + address; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,74 @@ | ||||
| package org.baeldung.caching.example; | ||||
| 
 | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.cache.CacheManager; | ||||
| import org.springframework.cache.annotation.Cacheable; | ||||
| import org.springframework.context.ApplicationContext; | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| @Component | ||||
| @CacheConfig("addressDemo") | ||||
| public class CustomerDataService { | ||||
| 
 | ||||
|     @Autowired | ||||
|     CacheManager cacheManager; | ||||
| 
 | ||||
|     /** | ||||
|      * The method returns the customer's address, | ||||
|        only it doesn't find it the cache- addresses and directory. | ||||
|      * | ||||
|      * @param customer the customer | ||||
|      * @return the address | ||||
|      */ | ||||
|     @Cacheable("addresses", “directory”) | ||||
|     public String getAddress1(Customer customer) { | ||||
|         return customer.getAddress(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * The method returns the customer's address, | ||||
|         but refreshes all the entries in the cache to load new ones. | ||||
|      * | ||||
|      * @param customer the customer | ||||
|      * @return the address | ||||
|      */ | ||||
|     @CacheEvict(value="addresses", allEntries=true) | ||||
|     public String getAddress2(Customer customer) { | ||||
|         return customer.getAddress(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * The method returns the customer's address, | ||||
|         but not before selectively evicting the cache as per specified paramters. | ||||
|      * | ||||
|      * @param customer the customer | ||||
|      * @return the address | ||||
|      */ | ||||
|     @Caching(evict = { @CacheEvict("addresses"), @CacheEvict(value="directory", key="customer.name") }) | ||||
|     public String getAddress3(Customer customer) { | ||||
|         return customer.getAddress(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * The method uses the class level cache to look up for entries. | ||||
|      * | ||||
|      * @param customer the customer | ||||
|      * @return the address | ||||
|      */ | ||||
|     @Cacheable // parameter not required as we have declared it using @CacheConfig | ||||
|     public String getAddress4(Customer customer) { | ||||
|         return customer.getAddress(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * The method selectively caches the results that meet the predefined criteria. | ||||
|      * | ||||
|      * @param customer the customer | ||||
|      * @return the address | ||||
|      */ | ||||
|     @CachePut(value="addresses", condition=”#customer.name=’Tom’”) | ||||
|     @CachePut(value="addresses", unless=”#result.length>64”) | ||||
|     public String getAddress5(Customer customer) { | ||||
|         return customer.getAddress(); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,30 @@ | ||||
| <beans xmlns="http://www.springframework.org/schema/beans" | ||||
|     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|     xmlns:cache="http://www.springframework.org/schema/cache" | ||||
|     xsi:schemaLocation=" | ||||
|         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd | ||||
|         http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> | ||||
| 
 | ||||
|         <cache:annotation-driven /> | ||||
| 
 | ||||
|            <context:annotation-config/> | ||||
|            <bean class="org.baeldung.caching.config.myAppConfig"/> | ||||
| 
 | ||||
| 
 | ||||
|         <!-- the service that you wish to make cacheable.--> | ||||
|        <bean id="customerDataService" class="org.baeldung.caching.example.CustomerDataService"/> | ||||
| 
 | ||||
|        <!-- define caching behavior --> | ||||
|        <cache:advice id="cachingBehavior" cache-manager="cacheManager"> | ||||
|            <cache:caching cache="addresses"> | ||||
|                <cache:cacheable method="getAddress" key="#customer.name"/> | ||||
|            </cache:caching> | ||||
|        </cache:advice> | ||||
| 
 | ||||
|        <!-- apply the behavior to all the implementations of CustomerDataService interface --> | ||||
|        <aop:config> | ||||
|            <aop:advisor advice-ref="cachingBehavior" | ||||
|        pointcut="execution(*org.baeldung.caching.example.CustomerDataService.*(..))"/> | ||||
|        </aop:config> | ||||
| 
 | ||||
| </beans> | ||||
| @ -0,0 +1,21 @@ | ||||
| package org.baeldung.caching.test; | ||||
| 
 | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.context.ApplicationContext; | ||||
| import org.springframework.context.support.ClassPathXmlApplicationContext; | ||||
| import org.springframework.stereotype.Component; | ||||
| import static org.junit.Assert.*; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| @Component | ||||
| public class SpringCachingBehaviorTest { | ||||
|  @Test | ||||
|  public void testCaching() { | ||||
|     @SuppressWarnings("resource") | ||||
|     ApplicationContext context = new ClassPathXmlApplicationContext("config.xml"); | ||||
|     example = context.getBean(CustomerDataService.class); | ||||
|     Customer cust = new Customer("Tom", "67-2, Downing Street, NY"); | ||||
|     example.getAddress(cust); | ||||
|     fail("Unable to instantiate the CustomerDataService"); | ||||
|   } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user