在上一篇文章Spring in Action 4 读书笔记之使用标签创建 AOP中讲解了如何使用标签定义aspect,本文继续进行这部分内容。如前所述,Spring的AOP都是作用在方法级别,有时候,需要监听函数的参数,本文讲解如何根据不同的参数值,执行不同的行为。比如下面的代码,记录不同参数执行的次数。
定义aspect
1 | package soundsystem; |
可以看到,这里是有@Pointcut标签定义了一个aspect。除了是有execution之外,还使用args指定参数为trackNumber,需要注意的是,args函数的参数名trackNumber需要和被监听的trackPlayed函数同名。countTrack函数使用@Before标签,定义了在trackPlayed方法执行前做的事。这里访问了trackPlayed方法的参数trackNumber,并且记录了该参数trackNumber被执行的次数。
定义配置
1 |
|
使用@EnableAspectJAutoProxy标签,标注配置类,表示使用代理监听的目标类。并且使用@Bean标签,生成TrackCounter这个aspect的bean以及CompactDisc的bean。
测试aspect
可以使用下面的例子,验证执行次数:
1 |
|