SpringAOP处理通知中的参数

Spring借助AspectJ的切点表达式语言来定义Spring切面

在spring中尝试使用其他指示器时,会抛出IllegalArgument-Exception异常。

如上的这些指示器,只有exception指示器是实际执行匹配的,而其他都是用来限制匹配的。

切面表达式分析

带参数的切点表达式分解

在该切点表达式中使用了args(trackNumber)限定符。表示传递给playTrack()方法的int类型参数也会传递到通知中去。参数名trackNumber也与切点方法签名中的参数相匹配。

创建切面

@Aspect
    public class TrackCounter {

        @Pointcut("execution(* com.wqh.aop.CompactDisc.playTrack(int))&&args(trackNumber)")
        public void trackPlayder(int trackNumber){}

        @Before("trackPlayder(trackNumber)")
        public void countTrack(int trackNumber) {
            System.out.println("前置通知:targetNumber=" + trackNumber);
        }
    }

连接点类

@Service
    public class CompactDisc {
        public void playTrack(int trackNumber){
            System.out.println("trackNumber =" + trackNumber);
        }
    }

XML配置

 <!--启用AspectJ的自动代理-->
    <aop:aspectj-autoproxy/>

    <!--声明bean-->
    <bean class="com.wqh.aop.TrackCounter"/>
    <!--自动扫描包下的类-->
    <context:component-scan base-package="com.wqh.aop"/>

测试

    @Test
    public void testT(){
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext(
                        new String[]{"classpath:/spring/applicationContext.xml"});
        CompactDisc compactDisc = (CompactDisc) applicationContext.getBean("compactDisc");
        compactDisc.playTrack(12);
    }

上面给指定方法传入的参数是12,在通知中获取到了该参数

另外:在xml中配置切面来处理通知中的参数,其实也差不多,只是把切点表达式放到了XML配置文件中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值