博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Spring实战》第4章--面向切面的Spring--处理通知中的参数(经验总结)
阅读量:6189 次
发布时间:2019-06-21

本文共 2317 字,大约阅读时间需要 7 分钟。

今天学习《Spring实战》第4章《面向切面的Spring》,根据4.3.3小节写出如下切面类:

package proxy;import java.util.HashMap;import java.util.Map;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;@Component@Aspectpublic class Audience {        private Map
trackCounts = new HashMap<>(); @Pointcut("execution(** concert.JayPerform.playTrack(int)) && args(trackNum)") //<1> public void track(int trackNum) {} //<2> @AfterReturning("track(trackNum)") //<3> public void countTrack(int trackNum) //<4> { int currentCount = getPlayCount(trackNum); trackCounts.put(trackNum, currentCount+1); System.out.println("------- 这首歌播放了"+(currentCount+1)+"次"); } public int getPlayCount(int trackNumber) { return trackCounts.containsKey(trackNumber)?trackCounts.get(trackNumber):0; }}

代码中 <1>、<2>、<3>、<4> 处,int型参数的名称都是trackNum,这样保证了从命名切点到通知方法的参数转移。并且,这里的参数trackNum与concert.JayPerform.playTrack(int trackNum) 的参数命名相同。

经过实验,发现这4处的参数名称与concert.JayPerform.playTrack(int trackNum)中的参数名称不必相同,只要<1>与<2>处参数名称相同、<3>与<4>处参数名称相同即可。这四处代码可修改如下:

package proxy;import java.util.HashMap;import java.util.Map;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;@Component@Aspectpublic class Audience {        private Map
trackCounts = new HashMap<>(); @Pointcut("execution(** concert.JayPerform.playTrack(int)) && args(num1)") //<1> public void track(int num1) {} //<2> @AfterReturning("track(val1)") //<3> public void countTrack(int val1) //<4> { int currentCount = getPlayCount(val1); trackCounts.put(val1, currentCount+1); System.out.println("------- 这首歌播放了"+(currentCount+1)+"次"); } public int getPlayCount(int trackNumber) { return trackCounts.containsKey(trackNumber)?trackCounts.get(trackNumber):0; }}

转载于:https://www.cnblogs.com/dongling/p/9461529.html

你可能感兴趣的文章
spring,orm 题目
查看>>
Java 回调函数
查看>>
2018/02/13
查看>>
echarts(二)
查看>>
Hibernate映射文件结构
查看>>
rollPagerView引导页轮播图
查看>>
redis集群介绍,redis集群搭建配置,redis集群操作
查看>>
Gitbilt hooks 简单的账户操作权限控制
查看>>
CentOS系统下的数据盘挂载
查看>>
[3.30]#珠海GDG#成立大会胜利闭幕!
查看>>
mybatis 批量Update(2)
查看>>
RabbitMQ安装
查看>>
django 学习笔记 (五)
查看>>
iOS UItableviewCell实现可变高度的UITextView,动态刷新高度
查看>>
iOS开发- 利用runtime拦截UIButton的点击事件,防止重复点击
查看>>
Java,Jsp获取客户端IP地址
查看>>
100-88
查看>>
android4.0.3 编译lichee 报错dhd-cdc-sdmmc-gpl-3.0.8问题
查看>>
crc16 - 产生Modbus RTU格式的CRC码
查看>>
招聘又来了,这次推荐有奖哦
查看>>