- 浏览: 332997 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
xing0029:
这样配置的话 事物不成功啊 还有什么地方需要注意的么 可以加我 ...
JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器) -
mengqingyu:
liuxiaolu 写道jotm的我的没有成功,楼主能否帮助一 ...
JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器) -
liuxiaolu:
jotm的我的没有成功,楼主能否帮助一下
JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器) -
aptech406328627:
求解救,没弄好QQ:1053942353
Spring邮件发送(可带附件,模板,群发,异步发送等功能) -
ghpaas:
web可视化自定义表单推荐使用GForms开发平台(http: ...
在线表单设计器设计原理
AOP+Ehcache 实现缓存功能
设计思路:查询数据,通过AOP拦截需要缓存的方法,在方法进入之前进入拦截器,通过包、类、方法名称作为key获取当前缓存对象结果,如果为空,则执行真正的方法,如果有缓存对象,则直接返回。删除和修改数据,每次都在此之前调用拦截器方法清除相关缓存对象。
1.需要引入AOP和Ehcache相关Jar文件
2.编写切面类里面写上拦截时的业务逻辑
3.配置文件中配置AOP和类的实例化
4.引入ehcache.xml文件
设计思路:查询数据,通过AOP拦截需要缓存的方法,在方法进入之前进入拦截器,通过包、类、方法名称作为key获取当前缓存对象结果,如果为空,则执行真正的方法,如果有缓存对象,则直接返回。删除和修改数据,每次都在此之前调用拦截器方法清除相关缓存对象。
1.需要引入AOP和Ehcache相关Jar文件
2.编写切面类里面写上拦截时的业务逻辑
import java.io.Serializable; import java.util.List; import net.sf.ehcache.Cache; import net.sf.ehcache.Element; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; /** * * 类功能描述:AOP+Ehcache 拦截需要缓存的方法,插入点方法执行前后 * * @author <a href="mailto:qingyu.meng21@gmail.com">mengqingyu </a> * @version $Id: codetemplates.xml,v 1.1 2009/03/06 01:13:01 mengqingyu Exp $ * Create: 2011-12-12 下午04:27:44 */ public class MethodCacheInterceptor implements MethodInterceptor, InitializingBean { private static final Log logger = LogFactory.getLog(MethodCacheInterceptor.class); private Cache cache; public void setCache(Cache cache) { this.cache = cache; } public MethodCacheInterceptor() { super(); } /** * 拦截Service/DAO的方法,并查找该结果是否存在,如果存在就返回cache中的值, * 否则,返回数据库查询结果,并将查询结果放入cache */ @Override public Object invoke(MethodInvocation invocation) throws Throwable { Object result; String cacheKey = getCacheKey(invocation.getThis().getClass().getName() , invocation.getMethod().getName(), invocation.getArguments()); Element element = cache.get(cacheKey); logger.warn("检查缓存:" + cacheKey); if (element == null) { logger.warn("创建缓存......"); result = invocation.proceed(); element = new Element(cacheKey, (Serializable) result); cache.put(element); } List list = cache.getKeys(); return element.getValue(); } /** * * @function:获得cache key的方法,cache key是Cache中一个Element的唯一标识 * cache key包括 包名+类名+方法名,如com.co.cache.service.UserServiceImpl.getAllUser * @param targetName * @param methodName * @param arguments * @return * @author: mengqingyu 2011-12-12 下午04:35:21 */ private String getCacheKey(String targetName, String methodName, Object[] arguments) { StringBuilder sb = new StringBuilder(); sb.append(targetName).append(".").append(methodName); if (arguments != null) { for(Object o:arguments){ sb.append(".").append(o); } } return sb.toString(); } /** * implement InitializingBean,检查cache是否为空 */ public void afterPropertiesSet() throws Exception { Assert.notNull(cache, "缓存未初始化"); } } package com.berheley.bi.aop; import java.lang.reflect.Method; import java.util.List; import net.sf.ehcache.Cache; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.aop.AfterReturningAdvice; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; /** * * 类功能描述:AOP+Ehcache 拦截需要缓存的方法,插入点方法执行之后 * * @author <a href="mailto:qingyu.meng21@gmail.com">mengqingyu </a> * @version $Id: codetemplates.xml,v 1.1 2009/03/06 01:13:01 mengqingyu Exp $ * Create: 2011-12-12 下午04:27:44 */ public class MethodCacheAfterAdvice implements AfterReturningAdvice, InitializingBean { private static final Log logger = LogFactory.getLog(MethodCacheAfterAdvice.class); private Cache cache; public void setCache(Cache cache) { this.cache = cache; } public MethodCacheAfterAdvice() { super(); } /** * 拦截Service/DAO的方法,并查找该结果是否存在,如果存在则删除结果, * 否则忽略,此方法为了保证更新数据库同时同步缓存 */ @Override public void afterReturning(Object arg, Method method, Object[] arguments, Object obj) throws Throwable { String className = obj.getClass().getName(); List<String> list = cache.getKeys(); for(String cacheKey:list){ if(cacheKey.startsWith(className)){ cache.remove(cacheKey); logger.debug("删除缓存:" + cacheKey); } } } /** * implement InitializingBean,检查cache是否为空 */ public void afterPropertiesSet() throws Exception { Assert.notNull(cache, "缓存未初始化"); } }
3.配置文件中配置AOP和类的实例化
<?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-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/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd "> <!-- AOP+Ehcache by mengqingyu--> <!-- 引用ehCache的配置 --> <bean id="defaultCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation"> <value>classpath:ehcache.xml</value> </property> </bean> <!-- 定义ehCache的工厂,并设置所使用的Cache name 如找不到则使用默认缓存配置defaultCache--> <bean id="ehCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"> <property name="cacheManager"> <ref local="defaultCacheManager"/> </property> <property name="cacheName"> <value>systemCache</value> </property> </bean> <!-- find/create cache拦截器 --> <bean id="methodCacheInterceptor" class="com.berheley.bi.aop.MethodCacheInterceptor"> <property name="cache"> <ref local="ehCache" /> </property> </bean> <!-- find/create cache拦截器 --> <bean id="methodCacheAfterAdvice" class="com.berheley.bi.aop.MethodCacheAfterAdvice"> <property name="cache"> <ref local="ehCache" /> </property> </bean> <!-- 自动代理 --> <aop:config> <!-- 这里可添加多个切入点 --> <aop:advisor pointcut="execution(* com.berheley.bi.report.service.impl.SummaryReportServiceImpl.getSource*(..))" advice-ref="methodCacheInterceptor" /> <aop:advisor pointcut="execution(* com.berheley.bi.report.service.impl.SummaryReportServiceImpl.getPrefixAndSuffix*(..))" advice-ref="methodCacheAfterAdvice" /> </aop:config> </beans>
4.引入ehcache.xml文件
<!-- AOP+Ehcache by mengqingyu--> <!-- diskStore 当内存缓存数量超过设置数量时,将数据写到硬盘中,path为硬盘相对路径 maxElementsInMemory 缓存中最大允许创建的对象数 eternal 缓存中对象是否为永久,如果true过期设置将无效 timeToIdleSeconds 自最后读取开始有效时间 timeToLiveSeconds 自创建开始有效时间 overflowToDisk 内存不足时是否启用磁盘缓存 --> <ehcache> <diskStore path="java.io.tmpdir"/> <defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="120" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"/> <cache name="systemCache" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="259200000" timeToLiveSeconds="259200000" overflowToDisk="true"/> </ehcache>
发表评论
-
Spring扩展点
2015-08-17 11:14 2624Spring扩展点 1.IOC生成类全名 <!-- ... -
Spring AOP动态代理
2015-01-25 22:23 789package com.test.dynamicproxy; ... -
Spring加载资源并装配对象的过程
2015-01-25 22:20 10581. 定义好Spring的配置文件。 2. 通过Resourc ... -
(转载)Spring Bean 初始化过程
2013-05-10 13:10 1154Spring 的几个接口 1.InitializingBea ... -
(转载)浅谈Spring事务隔离级别
2013-04-15 14:45 978一、Propagation : key属 ... -
AOP+LOG4J日志框架(自定义注解)
2013-04-11 15:00 2748工作中用到日志功能,参考网上一些资料,写了个比较通用的日志框架 ... -
(转载)spring AOP获得session
2013-02-20 17:01 2420由于Spring 的AOP面向切面编程,与Servlet容器没 ... -
Quartz(三)原理及源码分析
2012-10-30 14:56 14047quartz配置文件中可以通过以下两种配置读取方式 org.q ... -
spring-security3(二)源码分析
2012-04-06 17:08 8188利用断点走了一遍spring-security源码的核心部分, ... -
spring-security3(一)配置详解及API扩展(包含ajax返回)
2012-04-06 17:05 3816最近对spring-security3做了一些初步了解,搜集了 ... -
JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
2010-01-15 21:01 6665一.以下介绍Spring中直接集成JOTM提供JTA事务管理、 ... -
Quartz(二)整合Spring容器中bean及动态调度任务
2010-01-13 10:01 7732Quartz 是开源任务调度框架中的翘首,它提供了强大任务 ... -
Quartz(一)在Spring中设置动态定时任务
2009-05-17 07:09 7807什么是动态定时任务: 是由客户制定生成的,服务端只知道该去执行 ... -
Spring邮件发送(可带附件,模板,群发,异步发送等功能)
2009-05-17 06:27 8733以下是我对spring发送邮件的总结: 分别使用了两种方法:单 ...
相关推荐
在本篇【Spring AOP+ehCache简单缓存系统解决方案】中,我们将探讨如何利用Spring AOP(面向切面编程)和ehCache框架来构建一个高效、简单的缓存系统,以提升应用程序的性能。ehCache是一款流行的开源Java缓存库,它...
首先,EhCache 是一个广泛使用的开源 Java 缓存框架,它可以存储对象并提供高速访问。Spring 对 EhCache 的集成使得在 Spring 应用程序中使用缓存变得非常方便。通过 Spring 的配置,EhCache 可以被配置为自动管理...
当我们谈论“Spring + Ehcache + Redis”两级缓存时,我们实际上是在讨论如何在Java环境中利用Spring框架来集成Ehcache作为本地缓存,并利用Redis作为分布式二级缓存,构建一个高效且可扩展的缓存解决方案。...
Ehcache则是一个广泛使用的内存缓存系统,它可以帮助提高应用性能,通过缓存数据来减少数据库的读取操作。 Spring Security前身Acegi Security是Spring框架的一个扩展,它提供了一套全面的权限管理和认证机制,包括...
首先,Spring框架是Java应用的核心,它提供了依赖注入(DI)和面向切面编程(AOP),使得对象之间的关系更加灵活,降低了代码的耦合度。Spring还提供了丰富的模块,如数据访问/集成、Web MVC、事务管理等,为开发者...
- 在需要缓存的方法上添加 @Cacheable 注解,让 Spring AOP 自动处理缓存逻辑。 - 可以通过 @CacheEvict 清除特定缓存,@CachePut 更新缓存。 **4. 项目结构与 dadminboot** 在 `dadminboot` 这个项目的目录结构中...
在这个"spring+ehcache示例整合Demo"中,我们将会探讨如何将Ehcache集成到Spring框架中,以实现高效的缓存管理。 首先,我们需要在项目的`pom.xml`文件中引入Ehcache和Spring的依赖。Ehcache通常使用的是`org....
在IT行业中,Spring、iBatis和Ehcache是三个非常重要的开源框架,它们分别用于企业级应用的依赖注入、数据库操作和缓存管理。这个"spring+ibatis+ehcache整合例子"是一个完整的示例项目,展示了如何将这三个框架无缝...
在本文中,我们将深入探讨如何在Spring框架中集成并使用AOP(面向切面编程)来实现对EHCache的高效管理。Spring是一个广泛使用的Java应用框架,它提供了强大的依赖注入和面向切面编程功能。而EHCache是一款流行、高...
在IT行业中,Spring AOP(面向切面编程)和EhCache是两个非常重要的概念,它们在提升应用程序性能和管理缓存方面发挥着关键作用。本文将深入探讨如何结合Spring AOP与EhCache实现一个简单的缓存实例,以便优化Java...
这个实例演示了如何利用Maven作为构建工具,Spring作为核心框架,Ehcache作为缓存解决方案,以及Spring JDBC处理数据库交互。 **Maven** 是一个项目管理和综合工具,它管理项目的构建、依赖关系和生命周期。在本...
本篇文章将详细探讨如何在Spring框架中集成并实现基于方法的缓存机制,利用Ehcache来优化数据访问。 首先,我们需要理解Spring的AOP概念,AOP允许我们定义横切关注点,如日志、事务管理或,正如在这个案例中,缓存...
【标题】"ssm多模块基础框架+dubbo+ehcache" 涉及到的核心技术栈包括Spring、SpringMVC、MyBatis(SSM)框架的整合,Dubbo服务治理框架,以及Ehcache缓存系统。这些技术在企业级Java应用开发中扮演着重要角色,下面...
Ehcache支持分布式缓存,可以处理大量并发请求,并且与Hibernate有良好的集成,可以在查询结果缓存方面发挥重要作用。 4. 自己写的Cache系统:在一些特定场景下,开发者可能需要定制化的缓存解决方案,以满足特定...
Spring是一个全面的后端应用框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性;Hibernate是一个优秀的ORM(对象关系映射)框架,用于简化数据库操作;而Ehcache则是一个高效的缓存解决方案...
Spring框架是Java企业级应用的核心框架,它提供了一个全面的基础设施,包括DI(依赖注入)、AOP(面向切面编程)、数据访问、Web应用、事务管理等。Spring的IoC容器是其核心,可以管理对象的生命周期和依赖关系。在...
Spring框架对Ehcache有很好的支持,可以通过`<ehcache:config>`标签进行配置,并通过`@Cacheable`等注解实现方法级别的缓存控制。 集成这三个框架,首先要在Spring的配置文件中定义DataSource、SqlSessionFactory和...
3. 引入Ehcache:添加Ehcache依赖,配置缓存管理器,指定缓存策略,并在需要的地方使用缓存注解。 4. 在Spring中管理MyBatis和Ehcache:使用Spring的声明式事务管理,同时将MyBatis的SqlSessionTemplate和Ehcache的...