Spring学习笔记(十)-----Spring in Action

Spring学习笔记(十)-----Spring in Action
现在你可以为你的应用系统创建可重复使用的切入点了。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 >

你可能感兴趣的:(Spring学习笔记(十)-----Spring in Action)