posts - 66,  comments - 11,  trackbacks - 0
现在你可以为你的应用系统创建可重复使用的切入点了。Spring支持在这些切入点上进行操作-合并与交叉-来创建新的切入点
。只有当所有切入点都匹配时交叉集合才匹配,任何一个切入点匹配都会使合并集合匹配。为了对2个Pointcut对象进行合并,必须使用Pointcuts类。例如:
Pointcut union = Pointcuts.union(pointcut1,pointcut2);
这种方式的一个缺点是它需要通过编码来实现。
package com.wyq.spring.base.aopinstance;

import java.util.List;

import org.springframework.aop.ClassFilter;
import org.springframework.aop.MethodMatcher;
import org.springframework.aop.Pointcut;
import org.springframework.aop.support.Pointcuts;

/** 
 * 
@author 作者 
 * 
@version 创建时间:2009-11-6 下午02:18:03 
 * 类说明 
 
*/
public class UnionPointcut implements Pointcut {
    
//声明合并的Pointcut实例
    private Pointcut delegate;
    
    
public Pointcut getDelegate() {
        
return delegate;
    }

    
public void setDelegate(Pointcut delegate) {
        
this.delegate = delegate;
    }
    
//委托给Pointcut的方法
    public ClassFilter getClassFilter() {
        
return getDelegate().getClassFilter();
    }

    
public MethodMatcher getMethodMatcher() {
        
return getDelegate().getMethodMatcher();
    }
    
//创建组合切入点
    public void setPointcuts(List pointcuts){
        
if(pointcuts == null || pointcuts.size()==0){
            System.out.println(
"没有要组合的切入点");
        }
        delegate 
= (Pointcut)pointcuts.get(0);
        
for(int i=1;i<pointcuts.size();i++){
            Pointcut pointcut 
= (Pointcut)pointcuts.get(i);
            delegate 
= Pointcuts.union(delegate,pointcut);
        }
    }

}
映射文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans
    
xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    
<bean id="frequentCustomerAdvice" class="com.wyq.spring.common.aopinstance.namemachmethodpointcut.PrequentCustomerAdvice"></bean>
    
    
<bean id="queryInterceptor" class="com.wyq.spring.common.aopinstance.namemachmethodpointcut.QueryInterceptor"></bean>
    
    
<bean id="unionpointcut" class="com.wyq.spring.common.aopinstance.composablepointcut.UnionPointcut">
        
<property name="delegate">
            
<ref bean="frequentCustomerPointcutAdvisor"/>
        
</property>
        
<property name="pointcuts">
            
<list>
                
<ref bean="queryPointCutAdvisor"/>
            
</list>
        
</property>
    
</bean>
    
<bean id="frequentCustomerPointcutAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
        
<property name="mappedName">
            
<value>order*</value>
        
</property>
        
<property name="advice">
            
<ref bean="frequentCustomerAdvice"/>
        
</property>
    
</bean>
    
    
<bean id="queryPointCutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        
<property name="pattern">
            
<value>.*get.+By.+</value>
        
</property>
        
<property name="advice">
            
<ref bean="queryInterceptor"/>
        
</property>
    
</bean>
</beans>

posted on 2009-11-06 14:48 王永庆 阅读(156) 评论(0)  编辑  收藏 所属分类: SPRING

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿(1)

随笔分类

随笔档案

关注blogs

搜索

  •  

最新评论

阅读排行榜

评论排行榜