Updated the caching behavior code:

This commit is contained in:
Abhi Bavishi 2015-05-30 15:25:10 +05:30
parent 57585f9b2c
commit df2f1cbaf8
5 changed files with 237 additions and 0 deletions

View File

@ -0,0 +1,9 @@
@Configuration
@EnableCaching
public class myAppConfig {
// Your configuration code goes here.
}

View File

@ -0,0 +1,74 @@
/**
* The Class Customer.
*/
public class Customer {
/** The id. */
private int id;
/** The name. */
private String name;
/** The address. */
private String customerAddress;
Customer(String name, String address){
this.name = name;
this.address = address;
}
/**
* Gets the id.
*
* @return the id
*/
public int getId() {
return id;
}
/**
* Sets the id.
*
* @param id the new id
*/
public void setId(int id) {
this.id = id;
}
/**
* Gets the name.
*
* @return the name
*/
public String getName() {
return name;
}
/**
* Gets the address.
*
* @return the address
*/
public String getCustomerAddress() {
return this.customerAddress;
}
/**
* Sets the name.
*
* @param name the new name
*/
public void setName(String name) {
this.name = name;
}
/**
* Sets the address.
*
* @param name the new address
*/
public void setCustomerAddress(String address) {
this.customerAddress = this.name + "," + address;
}
}

View File

@ -0,0 +1,93 @@
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;
/**
* The Class CustomerDataService.
*/
@Component
@CacheConfig("addressDemo")
public class CustomerDataService {
/** The cache manager. */
@Autowired
CacheManager cacheManager;
/**
* Gets the address.
*
* @param customer the customer
* @return the address
*/
@Cacheable("addresses", directory)
public String getAddress1(Customer customer) {
return customer.getAddress();
}
/**
* Gets the address.
*
* @param customer the customer
* @return the address
*/
@CacheEvict(value="addresses", allEntries=true)
public String getAddress2(Customer customer) {
return customer.getAddress();
}
/**
* Gets the address.
*
* @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();
}
/**
* Gets the address.
*
* @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();
}
/**
* Gets the address.
*
* @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();
}
}

View File

@ -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>

View File

@ -0,0 +1,31 @@
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;
/**
* The Class CustomerDataService.
*/
@Component
public class SpringCachingBehaviorTest {
/**
* The main method.
*
* @param args the arguments
*/
public static void main(String[] args) {
@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);
}
}