《Pro Spring》学习笔记之JdkRegexpMethodPointCut正则表达式切入点实例

本文介绍了如何在Spring中利用JdkRegexpMethodPointCut进行正则表达式切入点的配置,以实现对特定方法名(如包含foo的)的前置和后置通知。通过一个简单的Bean和测试用例,展示了切面在匹配方法名时的工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果我们想对所有以中间由foo组成的方法进切入(比如afooa为方法名),我们可以使用JdkRegexpMethodPointCut(JDK正则表达式方法切入点),也可以使用Perl5RegexpMethodPointCut(Perl5切入点正则表达式)

Bean:

 

package ch6.SimpleAOP.RegexpPointCut;
public class BeanOne {
   public void afooa(){
    System.out.println("afooa");
   }
   public void bfoob(){
    System.out.println("bfoob");
   }
   public void abara(){
    System.out.println("abara");
   }
}


 

SimpleAdvise

 

package ch6.SimpleAOP.RegexpPointCut;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class SimpleAdvise implements MethodInterceptor {

    
public Object invoke(MethodInvocation invocation) throws Throwable {
        System.out.println(
"before");
        Object retVal
=invocation.proceed();
        System.out.println(
"after");
        
return retVal;
    }


}

 

测试:

 

package ch6.SimpleAOP.RegexpPointCut;

import org.aopalliance.aop.Advice;
import org.springframework.aop.Advisor;
import org.springframework.aop.Pointcut;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.JdkRegexpMethodPointcut;
import org.springframework.aop.support.NameMatchMethodPointcut;

public class Test {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
         BeanOne one
=new BeanOne();
        
         BeanOne proxyOne;
         
         
         JdkRegexpMethodPointcut pc
=new JdkRegexpMethodPointcut();
         pc.setPattern(
".*foo.*");
         
         Advice advice
=new SimpleAdvise();
         Advisor advisor
=new DefaultPointcutAdvisor(pc,advice);
         
         
         
//创建BeanOne代理
         ProxyFactory pf1=new ProxyFactory();
         pf1.addAdvisor(advisor);
         pf1.setTarget(one);
         proxyOne
=(BeanOne)pf1.getProxy();
         
      
         
         
         proxyOne.afooa();
         proxyOne.bfoob();
         proxyOne.abara();
         
    }


}

 

结果:

before
afooa
after
before
abfoob
after
abara

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值