Spring使用术语一个对象的 advisor来表示一个方面,包含一个通知和一个指定特定连接点的切入点。 各种通知类型有MethodInterceptor (来自AOP联盟的拦截器API)和定义在org.springframework.aop包中的 通知接口。所有通知必须实现org.aopalliance.aop.Advice标签接口。 Spring-framework-1.1.2以上支持取出就可使用的通知有 MethodInterceptor、 ThrowsAdvice、 BeforeAdvice和 AfterReturningAdvice。奇怪的是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>