您的位置:首页 > 编程语言 > Java开发

SpringAOP处理通知中的参数

2017-06-08 09:35 429 查看

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配置文件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring java