`

使用Spring AOP设置Cache

阅读更多
一,选择缓存EHCache
毫无疑问ehcache.1.2.4.jar,这个发行包必须加入项目。

二,ehcache.xml 加入classpath
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:noNamespaceSchemaLocation="ehcache.xsd">

	<defaultCache
		maxElementsInMemory="10000"
		eternal="false"
		overflowToDisk="true"
		timeToIdleSeconds="120"
		timeToLiveSeconds="120"
		diskPersistent="false"
		diskExpiryThreadIntervalSeconds="120" />
	
	<cache name="legendapl"
		maxElementsInMemory="10000"
		eternal="false"
		overflowToDisk="false"
		timeToIdleSeconds="120"
		timeToLiveSeconds="360"
		diskPersistent="false"
		diskExpiryThreadIntervalSeconds="120" />
</ehcache>

其中Cache各各属性表示意义,可望文而知。

三,在applicationContext.xml加入缓存管理组件。
<bean>
	<bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
		<property name="configLocation" value="classpath:ehcache.xml" />
	</bean>
</bean>


四,缓存使用演示
@Aspect
@Component
public class CacheInterceptor extends BaseInterceptor{

	@Autowired
	@Qualifier("ehcacheManager")
	private CacheManager cm;
	
//	@Autowired
//	@Qualifier("cache")
//	private Cache cache;

	@Override
	@Around("execution(* cn.com.legendapl.spring.dao.impl.*.findAllUsers(..))")
	public Object around(ProceedingJoinPoint jp) throws Throwable {
		Cache cache = cm.getCache("legendapl");
		String key = "";
		Object[] args = jp.getArgs();
		for (Object o : args) {
			key += o.toString();
		}
		
		Object result = null;
		
		Element element = cache.get(key);
		if (element != null) {
			result = element.getValue();
		} else {
			result = jp.proceed();
			cache.put(new Element(key, result));
		}
		return result;
	}
}
2
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics