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

使用java5的注解和Sping/AspectJ的AOP 来实现Memcached的缓存

 
阅读更多
使用java5的注解和Sping/AspectJ的AOP 来实现Memcached的缓存

今天要介绍的是Simple-Spring-Memcached,它封装了对MemCached的调用,使MemCached的客户端开发变得超乎寻常的简单,只要一行代码就行:

@ReadThroughAssignCache(assignedKey = "VETS", expiration = 300, namespace = "NELZ")

是不是很神奇?这行代码指定了MemCached的key,过期时间和命名空间。假设你的MemCached服务器IP是:196.168.10.101,端口是:12000,那么在数据调用的配置文件中只要加上下面配置代码就可以了:

 

 1 <import resource="classpath:simplesm-context.xml" />
 5   <bean id="memcachedConnectionBean" class="net.nelz.simplesm.config.MemcachedConnectionBean">
 7     <property name="consistentHashing" value="true" />
 9     <property name="nodeList" value="196.168.10.101:12000" />
 5   </bean>
  

从simplesm-context.xml的内容中,可以看出它所封装的类和方法:

 

  1   <bean id="memcachedClientFactory" class="net.nelz.simplesm.config.MemcachedClientFactory" >
  3     property name="bean" ref="memcachedConnectionBean" />
  5   </bean>
  9   <bean id="memcachedClient" factory-bean="memcachedClientFactory" factory-method="createMemcachedClient" />
 13    <bean id="methodStore" class="net.nelz.simplesm.aop.CacheKeyMethodStoreImpl" />
 17   <bean id="net.nelz.simplesm.DefaultKeyProvider" class="net.nelz.simplesm.impl.DefaultKeyProvider">
 19     <property name="methodStore" ref="methodStore" />
 21   </bean>
 25   <bean id="readThroughSingleCache" class="net.nelz.simplesm.aop.ReadThroughSingleCacheAdvice">
 27     <property name="cache" ref="memcachedClient" />
 29     <property name="methodStore" ref="methodStore" />
 31     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />
 33   </bean>
 35   <bean id="readThroughMultiCache" class="net.nelz.simplesm.aop.ReadThroughMultiCacheAdvice">
 37     <property name="cache" ref="memcachedClient" />
 39     <property name="methodStore" ref="methodStore" />
 41     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />
 43   </bean>
 45   <bean id="readThroughAssignCache" class="net.nelz.simplesm.aop.ReadThroughAssignCacheAdvice">
 47     <property name="cache" ref="memcachedClient" />
 49     <property name="methodStore" ref="methodStore" />
 51     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />
 53   </bean>
 54 
 55   <bean id="updateSingleCache" class="net.nelz.simplesm.aop.UpdateSingleCacheAdvice">
 57     <property name="cache" ref="memcachedClient" />
 59     <property name="methodStore" ref="methodStore" />
 61     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />
 63   </bean>
 64 
 65   <bean id="updateMultiCache" class="net.nelz.simplesm.aop.UpdateMultiCacheAdvice">
 67     <property name="cache" ref="memcachedClient" />
 69     <property name="methodStore" ref="methodStore" />
 71     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />
 73   </bean>
 75   <bean id="updateAssignCache" class="net.nelz.simplesm.aop.UpdateAssignCacheAdvice">
 77     <property name="cache" ref="memcachedClient" />
 79     <property name="methodStore" ref="methodStore" />
 81     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />
 83   </bean>
 85   <bean id="invalidateSingleCache" class="net.nelz.simplesm.aop.InvalidateSingleCacheAdvice">
 87     <property name="cache" ref="memcachedClient" />
 89     <property name="methodStore" ref="methodStore" />
 91     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />
 93   </bean>
 95   <bean id="invalidateMultiCache" class="net.nelz.simplesm.aop.InvalidateMultiCacheAdvice">
 97     <property name="cache" ref="memcachedClient" />
 99     <property name="methodStore" ref="methodStore" />
101     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />
103   </bean>






105   <bean id="invalidateAssignCache" class="net.nelz.simplesm.aop.InvalidateAssignCacheAdvice">
107     <property name="cache" ref="memcachedClient" />
109     <property name="methodStore" ref="methodStore" />
111     <property name="defaultKeyProvider" ref="net.nelz.simplesm.DefaultKeyProvider" />
113   </bean>
 

Simple-Spring-Memcached还提供了一个例子,在spring的petClinic例子中加入了几行代码,就实现了对MemCached的调用:

 

 1 import net.nelz.simplesm.annotations.ReadThroughAssignCache;
 2 
 3 import net.nelz.simplesm.annotations.ReadThroughSingleCache;
 4 
 5 @ReadThroughAssignCache(assignedKey = "VETS", expiration = 300, namespace = "NELZ")
 6 
 7     public Collection<Vet> getVets() {
 8 
 9         System.out.println("\n ! ! !Gonna wait a bit: " + new Date() + "\n");        
10 
11         try {
12 
13             Thread.sleep(4000);
14 
15         } catch (Exception ex) {}
16 
17         return sessionFactory.getCurrentSession().createQuery("from Vet vet order by vet.lastName, vet.firstName").list();
18 
19          }
  

为了加强测试的效果,在第一次读取数据时,故意停顿了一下(sleep)。
转载自:
http://www.blogjava.net/hao446tian/archive/2012/04/10/373725.html

分享到:
评论

相关推荐

    Simple-Spring-Memcached

    该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使能够在Sping中管理bean缓存。使用Simple-Spring-Memcached只需要简单的配置和在要缓存的方法的返回值或参数上标注上相应的注解就可以。

    sping aop注解配置

    Spring AOP(面向切面编程)是Spring框架的...通过以上知识点,我们可以创建出完全基于注解的Spring AOP配置,从而更方便地实现横切关注点的注入和管理。在实际开发中,这可以极大地提高代码的可维护性和模块化程度。

    sping_aop实现

    - 或者在Java配置中,使用`@Aspect`注解定义切面,`@Pointcut`定义切入点,`@Before`, `@After`, `@Around`等定义通知。 5. **AOP应用场景** - **事务管理**:最常见的是使用AOP进行事务管理,通过切面来控制事务...

    Spring 与Ehcache实现基于方法的缓存

    在IT行业中,Spring框架是Java领域最广泛应用的轻量级框架之一,它为开发者提供了强大的依赖注入(DI)和面向切面编程(AOP)功能。Ehcache则是一款广泛使用的开源缓存解决方案,用于提高应用程序性能,减少数据库...

    Struts/Sping/Hibernate视频

    总的来说,"Struts/Sping/Hibernate视频"这个资源提供了学习这三大框架的实践机会,通过观看视频和阅读文档,你可以深入理解它们的工作原理,提升自己的Java Web开发技能。不过,理论学习的同时,动手实践同样重要,...

    aspectJ与XML配置的AOP

    AspectJ是Java平台上的一个开源AOP框架,它提供了强大的静态和动态织入功能,能够帮助开发者更好地管理横切关注点,如日志、事务、安全性等。另一方面,Spring框架虽然以依赖注入(DI)闻名,但它也包含了AOP功能,...

    spingAOP注解方式

    Spring AOP注解方式是Spring框架提供的一种面向切面编程的实现方式,它允许开发者在不修改原有业务代码的情况下,插入额外的功能,如日志记录、性能监控、安全控制、事务管理和异常处理等。这种方式极大地简化了代码...

    使用Spring配置文件实现AOP

    这篇教程将详细讲解如何通过Spring的配置文件来实现AOP。 一、理解AOP概念 AOP的核心思想是将分散在各个模块中的交叉性代码(如日志、事务处理)抽取出来,形成独立的切面,以便于复用和维护。它提供了一种模块化的...

    Sping-AOP_new

    Spring AOP(面向切面编程)是Spring框架中的一个重要组成部分,它为开发者提供了一种强大的方式来处理系统级关注点,如日志、事务管理、性能监控等,从而实现代码的解耦和模块化。在Java开发中,Spring AOP通过引入...

    SpingAOP.rar

    5. **配置AOP**:在Spring配置文件中启用AOP并注册切面类,或者在Java配置类中使用`@EnableAspectJAutoProxy`注解。 6. **测试和验证**:编写测试用例,确保切面正确地应用到了目标对象,验证通知在预期的连接点被...

    spring aop

    总结来说,这个项目提供了基于Maven和Spring的Web应用实例,展示了如何利用Spring AOP进行切面编程,包括XML配置和注解两种方式。通过学习这个项目,你可以深入理解Spring AOP的工作原理,以及如何在实际项目中有效...

    Sping aop简单示例

    在这个示例中,我们使用的是运行时织入,通过XML配置来定义切面和通知。 在`SpringAdvice`这个文件夹中,我们可以期待找到相关的XML配置文件,这些文件将定义切面、通知以及它们与应用程序的关联。例如,可能会有一...

    test sping -aop.zip

    这个"test spring-aop.zip"文件应该包含了一个简单的Spring AOP示例,方便开发者快速理解和使用。下面将详细讲解Spring AOP的核心概念、工作原理以及如何配置和使用。 1. **核心概念** - **切面(Aspect)**:切面...

    sping AOP 权限管理方案浅析

    本文将深入浅析Spring AOP在权限管理中的应用,结合标签"源码"和"工具",我们将探讨如何利用Spring AOP实现精细的权限控制,并通过具体的代码示例来理解这一过程。 Spring AOP(Aspect Oriented Programming)是...

    如何使用Java Spring Boot执行RAG架构GenAI项目的示例.zip

    在本示例中,我们将探讨如何使用Java Spring Boot框架来实现一个基于RAG(Red-Amber-Green)架构的GenAI项目。RAG是一种广泛应用于项目管理、风险评估和KPI跟踪的颜色编码系统,其中Red代表高风险或问题,Amber表示...

    Sping AOP编程

    - **基于注解**: 使用Java的注解如`@Aspect`、`@Before`、`@After`等来定义切面和通知,更加简洁易用。 **3. 切点表达式** 切点表达式是用Groovy语法编写的,用于精确匹配需要拦截的方法。例如,`execution(* ...

    spring 注解 aop 源码下载

    srping 注解aop源码,包含sping junit测试

    sping-aop-3.jar

    sping-aop-3.jar 最新的第一次上传东西

    Spring--3.Spring AOP-2

    例如,你可以使用`@Before`注解来定义一个在方法执行前运行的通知: ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint ...

    sping+hiberate+注解项目配置

    Spring 和 Hibernate 是两个非常重要的 Java 开发框架,它们在企业级应用开发中广泛使用。Spring 提供了依赖注入、AOP(面向切面编程)、事务管理等核心功能,而 Hibernate 则是流行的 ORM(对象关系映射)工具,...

Global site tag (gtag.js) - Google Analytics