`
zhaoyu2288
  • 浏览: 39433 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

EHCache And Aspect Demo

阅读更多
EHCache配置文件ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
	<defaultCache
			maxElementsInMemory="1000"
			eternal="false"
			timeToIdleSeconds="3600"
			timeToLiveSeconds="7200"
			memoryStoreEvictionPolicy="LFU">
	</defaultCache>
	<cache name="StuCache"
		maxElementsInMemory="200"
			eternal="false"
			timeToIdleSeconds="300"
			timeToLiveSeconds="600"
			memoryStoreEvictionPolicy="LFU">
	</cache>
</ehcache>

Spring相关配置
<?xml version="1.0" encoding="utf-8"?>   
<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:aop="http://www.springframework.org/schema/aop"  xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd" >  
	<!-- 启动@AspectJ支持 -->
	<aop:aspectj-autoproxy/> 
	<!-- 定义切面类 -->
	<bean class="zl.AspectDemo"/>
	
	<!-- 引用ehCache的配置和管理类 -->     
	<bean id="defaultCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">     
  		 <property name="configLocation">     
   			<value>classpath:ehcache.xml</value>     
  		 </property>     
	</bean>     
   
	<!-- 定义ehCacheBean,并设置所使用的缓存名字 -->     
	<bean id="ehCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">     
 		 <property name="cacheManager">     
  			 <ref local="defaultCacheManager"/>     
  		 </property>     
  	 	 <property name="cacheName">     
     		 <value>StuCache</value>    
   		 </property>     
	</bean>     
</beans>

以下为核心切面Bean代码
package zl.aop;

import javax.annotation.Resource;

import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

//注解表示这个为切面Bean
@Aspect
public class AspectDemo {
	
	private static final Log logger = LogFactory.getLog(StudentAction.class);
	
	private Cache  cache;
	//注入缓存容器
	@Resource(name="ehCache")												
	public void setCache(Cache cache) {
		this.cache = cache;
	}

	//定义一个切入点:业务层中所有以Impl结尾的类的get方法 参数不限 返回值不限
	@Pointcut("execution(* zl.service.impl.*Impl.get*(..))")
	public void demoPointcut(){}	
	
	//环绕增强 切入段为demoPointcut
	@Around("demoPointcut()")
	public Object demo(ProceedingJoinPoint jp) throws Throwable{
		//得到 目标对象名
		String targetName = jp.getTarget().toString();
		//得到 目标方法名
		String methodName = jp.getSignature().getName();
		//得到 目标方法参数个数
		int argLength = jp.getArgs().length;
		//拼接一个由以上3个组成的可以作为唯一键的字符串
		String cacheKey = getCacheKey(targetName, methodName, argLength);
		//在缓存中用key查找
		Element element = cache.get(cacheKey);
		if(element == null){
			//如果没有
			logger.debug("缓存中没有,执行数据访问读取数据...");
			// proceed(..)为执行目标方法   jp.getArgs()为方法的参数
			Object result = jp.proceed(jp.getArgs());
			//创建一个新的缓存对象
			element = new Element(cacheKey,result);
			//放入缓存容器
			cache.put(element);
		}
		//返回 缓存对象所封装的结果集
		return element.getObjectValue();
	}
	
	//拼接一个key
	private String getCacheKey(String targetName,String methodName,int argLength){
		StringBuffer sb = new StringBuffer();
		sb.append(targetName).append("_")
			.append(methodName).append("_")
			.append(argLength);
		return sb.toString();
	}
}



以下为ehcache的jar以及aspect支持所需jar
分享到:
评论

相关推荐

    spring+ehcache示例整合Demo

    在这个"spring+ehcache示例整合Demo"中,我们将会探讨如何将Ehcache集成到Spring框架中,以实现高效的缓存管理。 首先,我们需要在项目的`pom.xml`文件中引入Ehcache和Spring的依赖。Ehcache通常使用的是`org....

    spring+ehcache完整示例demo

    本示例旨在通过一个完整的Spring集成Ehcache的Demo,帮助开发者理解如何在实际项目中实现高效的缓存管理。 首先,Ehcache是一个开源的、基于Java的分布式缓存系统,它可以显著减少对数据库的访问,从而提高系统的...

    ehcache rmi集群demo

    在这个“ehcache rmi集群demo”中,我们将探讨如何将Ehcache与RMI结合,实现一个跨节点的缓存集群。 首先,Ehcache的核心概念包括缓存管理器(Cache Manager)、缓存(Cache)、缓存项(Cache Entry)等。缓存管理...

    ehcache+spring demo 整合

    在"ehcache+spring demo 整合"项目中,我们有两个工程:一个Web工程和一个Java工程。Web工程通常用于构建前端展示和处理HTTP请求,而Java工程则包含了业务逻辑和服务层。这样的划分使得代码结构清晰,易于维护。 1....

    ehcache三个小demo

    在“ehcache三个小demo”中,我们有三个示例项目,分别展示了Ehcache的不同应用场景和配置方式。 1. **SpringMybatis**: 这个项目的名称暗示了它结合了Spring框架和MyBatis持久层框架。Ehcache在此可能作为数据层...

    spring+ehcache demo

    本示例"spring+ehcache demo"将带你深入理解如何在Spring环境中集成并使用Ehcache进行数据缓存。 Ehcache是一款广泛使用的开源Java缓存库,它提供了内存和磁盘存储,支持分布式缓存,并且可以与Spring框架无缝结合...

    ehcachedemo

    本示例项目“ehcachedemo”是为了帮助开发者快速理解和应用Ehcache,不论你是资深的架构师还是初学者,都能从中受益。 在“ehcachedemo”项目中,你将看到以下关键知识点: 1. **Ehcache的安装与配置**:Ehcache...

    RMI+EHCACHE Demo

    【RMI+EHCACHE Demo】是一个面向初学者的示例项目,旨在帮助理解如何结合Remote Method Invocation(远程方法调用)和Ehcache缓存技术。这个Demo将展示如何利用RMI来创建分布式系统,并利用Ehcache进行高效的数据...

    spring+ehcache实例demo

    软件仍然是开源,但一些新的主要功能(例如,快速可重启性之间的一致性的)只能在商业产品中使用,例如Enterprise EHCache and BigMemory。,维基媒体Foundationannounced目前使用的就是Ehcache技术。

    ehcache缓存demo

    通过这个简单的"ehcache-demo"项目,你可以了解到Ehcache的基本用法,包括配置、创建缓存实例、进行缓存操作等。实践这些示例有助于更好地理解Ehcache在实际应用中的工作原理。在你的项目中,你可以根据需求调整配置...

    ehcache 测试demo

    **Ehcache测试Demo详解** Ehcache是一款广泛使用的开源Java缓存系统,它提供了内存和磁盘存储的二级缓存机制,能够显著提升应用程序的性能。本篇将基于提供的"ehcache_test"压缩包文件,详细介绍如何在Java项目中...

    Ehcache分布式缓存入门案例demo_文件转树结构_

    Ehcache是一个高性能、轻量级的Java分布式缓存库,它被广泛应用于提升应用程序的性能,通过存储经常访问的数据来减少对数据库的依赖,从而加快系统的响应速度。本入门案例将带你了解如何使用Ehcache实现分布式缓存,...

    spring_springtestcase+ehcache的demo

    【标题】"spring_springtestcase+ehcache的demo"是一个示例项目,它整合了Spring框架的测试组件Spring Test Case与缓存解决方案Ehcache。这个项目的主要目的是展示如何在Spring应用程序中集成并测试Ehcache缓存系统...

    springboot3 + ehcache demo

    springboot3 + ehcache demo, this demo from git hub

    Ehcache_spring的demo

    本教程将详细介绍如何在Spring项目中整合Ehcache,并通过一个简单的demo来展示其用法。 首先,我们需要在项目中引入Ehcache和Spring的相关依赖。在Maven工程中,可以在`pom.xml`文件中添加以下依赖: ```xml ...

    ehcache3.3.4 demo

    在这个demo中,我们将深入探讨Ehcache的基本使用、配置以及其在实际应用中的价值。 首先,Ehcache的核心功能包括内存缓存、磁盘持久化和分布式缓存。内存缓存允许快速访问常用数据,而磁盘持久化确保了即使在系统...

    shiro-demo使用ehcache做缓存.zip

    在这个“shiro-demo使用ehcache做缓存”的示例中,我们将深入探讨如何结合Apache Shiro和 Ehcache 实现高效的缓存管理。 Ehcache 是一个广泛使用的开源Java缓存解决方案,它提供了内存和磁盘存储,以及对缓存数据的...

    Spring+MyBatis/Hibernate+Ehcache+Maven的Demo Web项目(稳定版)

    3.Ehcache方法缓存及页面缓存。见applicationContext-cache.xml及web.xml的pageEhCacheFilter 4.MyBatis+Maven代码生成工具。见bin目录 5.作为项目或者技术研究的基础架构。必要的jar包依赖都已配置好,基本都采用较...

    spring messageSource结合ehcache demo

    在本文中,我们将深入探讨如何在Spring框架中利用`messageSource`与Ehcache整合,以实现国际化(i18n)功能并优化提示语句的数据库读取性能。`messageSource`是Spring提供的一种用于处理多语言环境下的消息管理机制,...

    借助Ehcache缓存框架实现对页面的缓存Demo

    The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. ...

Global site tag (gtag.js) - Google Analytics