前例:老师留了个作业,编写后置通知,实现日志记录的功能,日志打印即可,打印内容的模板为:” 【日志-新增手表】:当前系统时间(格式:yyyy-MM-dd HH:mm:ss) 新增XXX品牌的手表,数据记录的主键为:XXX”,其中XXX为WatchService中addWatch方法的参数的属性值。
即两点:这个后置通知需要用到Target对象里的方法的参数,就这样,我就卡住了,在后置通知的类里加参数,在Target类里加参数,我企图将Target类的参数(watch)传给后置通知,但是捣鼓了半天,才发现这个思路根本行不通,我也不知道为啥,后来问了同学才知道有这么一个思路:
后置通知的切点可以传参数,比如JoinPoint joinPoint,这个参数的方法有如下:
getTarget():获取被代理对象
由于AOP代理原理是直接添加字节码文件,不创建新的对象。所以getThis()和getTarget()获取到的是同一个对象。同动态代理,不改变原有方法的前提下,可以拓展其他方法
getArgs():获取被代理方法的参数,返回Object[]。
所以我们可以在切面方法(即后置通知里的方法)设一个参数,JoinPoint joinPoint,然后在方法体中用joinPoint.getArgs()[0]获取Target方法的参数,即 watch
下面说说时间的格式化:
1.Date date=new Date()
System.out.println("当前时间为 date:" + date);
Long time = date.getTime();
System.out.println("当前时间为 time:" + time);
String pattern = "yyyy-MM-dd HH:m:ss";
SimpleDateFormat sf = new SimpleDateFormat(pattern);
System.out.println("当前时间为 format:" + sf.format(date));