动态方法名匹配切面 DynamicMethodMatcherPointcut

动态方法名匹配切面检查中,包括静态类检查,静态方法名检查和动态方法检查,而其中的两个静态检查又是不可缺少的。

其中的静态检查的时间,方式和对象与静态方法名匹配切面中的相同,所不同的是在代理对象第二次调用的已经匹配成功的方法后还得继续做动态方法检查(可以在其中对参数类型和取值进行

限制),此外,在代理对象调用方法时,静态方法名检查之后还得做动态方法检查。

和静态方法名匹配切面SaticMethodMatcherPointcutAdvisor一篇中提到的提到的几个文件需要更改的地方如下:

对GreetingAdvisor更改

package com.sias;
import java.util.ArrayList;
import java.util.List;
import java.lang.reflect.Method;
import org.springframework.aop.ClassFilter;
import org.springframework.aop.support.DynamicMethodMatcherPointcut;


public class GreetingAdvisor extends DynamicMethodMatcherPointcut{
 private static List<String> specialClientList=new ArrayList<String>();
 static{
  System.out.println("初始化动态切面类");
  specialClientList.add("阿丁");
  specialClientList.add("小一");
 }

 public boolean matches(Method method,Class clazz){
  System.out.println("调用静态切面类的mathes()方法对"+clazz.toString()+"类的"+method.getName()+"进行静态检查");
  return "greeTo".equals(method.getName());
 }

 public ClassFilter getClassFilter(){
  return new ClassFilter(){
   public boolean matches(Class clazz){
    System.out.println("调用getClassFileter()对"+clazz.getName()+"进行静态检查");
    return NativeWaiter.class.isAssignableFrom(clazz);
   }
  };
 }

 

public boolean matches(Method method,Class clazz,Object[] args){
  System.out.println("调用动态matches方法进行动态检查");
  if(args.length!=0){
  String cl=(String)args[0];
  return specialClientList.contains(cl);
  }
  else return false;
 }
}

 

applicationContext.xml配置文件需要更改,只需更改其中的advisor切面部分

<bean id="greetingAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut">
<bean class="com.sias.GreetingAdvisor"/>
</property>
<property name="advice" ref="greetingAdvice"/>
</bean>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值