您可以在这里快速查找:


 
您的位置: 编程学习 > java教程 > 200511
文章分类

Java技术
2005: 03 04 05 06 07 08
09 10 11 12
2006: 01 02

Asp.net
2005: 07 08 09 10 11 12
2006: 01 02

VB编程
2006: 02

Asp编程
2005: 11 12
2006: 01 02

C++/VC
2005: 10 11 12
2006: 01 02

Delphi
2005: 12
2006: 01 02

其它

 本文章适合所有读者

搞定用Spring AOP实现的缓存

chikai
        Spring使用术语一个对象的 advisor来表示一个方面,包含一个通知和一个指定特定连接点的切入点。 各种通知类型有MethodInterceptor (来自AOP联盟的拦截器API)和定义在org.springframework.aop包中的 通知接口。所有通知必须实现org.aopalliance.aop.Advice标签接口。 Spring-framework-1.1.2以上支持取出就可使用的通知有 MethodInterceptorThrowsAdviceBeforeAdviceAfterReturningAdvice。奇怪的是Spring-framework-1.1.1竟然有MethodAfterReturningAdvice通知,为什么到1.1.2就去掉该通知了呢?不懂,郁闷阿!!
    偶使用实现MethodInterceptor,InitializingBean接口的MethodCacheInterceptor类来作为方法处理结果拦截器,结合ehcache来做缓存。例如偶把业务服务类中的一个方法public List getAllOrganizations()的结果集使用MethodCacheInterceptor拦截后缓存起来。然后在此业务服务类中对缓存的对象有影响的其它方法,比如createOrganization(Organization org),updateOrganization(Organization org),removeOrganization(Organization org),使用实现AfterReturningAdvice,InitializingBean接口的MethodCacheAfterAdvice通知来做为方法执行后的缓存刷新和清理的拦截器。这样,在偶的业务服务类里面起码不会像号称使用AOP实现缓存的JdonFramework 框架中其例子中的业务服务类( create a User Model )里面象clearCache()此等和缓存相关的操作处处可见。
   TODO: 
 * MethodCacheAfterAdvice目前只支持方法参数或者方法返回值为继承Entity  
   POJO对象的拦截<br>
 * 缓存key的判断和处理,目前是以<code>getAll***s()</code>硬编码<br>