00:00
来我们接着往后说啊呃,刚才呢,我们把这个前置通知啊给大家说完了,那接下来呢,我们来说后面的几个通知啊,下一个我们来说一下后置通知啊,那么第一个说完以后呢,其实后面的就都比较简单了啊呃,后置通知的话,那顾名思义就是在目标方法之后什么呀,执行哎之后执行了啊。啊,之后执行,呃,但是呢,这个后置通知的有一个特点啊,什么特点呢?就是呃,不管这个目标方法啊,有没有抛出异常,它都会执行的啊,这是它的一个特点,来吧,我们一起来看一下啊,那我再写出一个方法来,叫做什么呀,After method OK,那么后置通知的话,我用到一个注解叫做什么after。
01:00
看到了吧,诶这就的after啊,这是我们的后置通知,好呃,然后像我们刚才的这个一个问题啊,就这里面的话呢,我们不是还需要这个获取到这个具体的信息吗?对吧,那这个呢,我们在这里面就先不讲了,我们的留到我们的后续通知里面来给大家去说啊,好那么这个A这里面的话呢,我们还要去写出我们的。切入量表达式吧,哎,Cuion呃,但是我们刚刚写的这个切入量表达式呢,啊,它这个作用比较单一啊,就是直接去作用到我们这个addd这个方法上面的,对不对,那如果说我希望我这个后置通知呢,能作用到我这个类中的所有的这个方法上面,那么这个时候我们应该怎么写?大家注意哈,我们就可以来把它写的更加的通用一点,你看哈,我把刚刚写的这个呢,先给它拷贝过来。啊,应该这个啊,来把它拷贝到这个地方,那么大家来分析一下,如果我这么写的话呢,也就代表着什么呀,我的方,我的这个通知只能作用到ad方法上,那假如说我想作用到每个方法上,我们应该怎么写呢?你就不能具体指定这个方法的名字了,那你要把它写成一个项,能理解吧,但是的话呢,现在又有一个问题,呃,你的所有的方法并不一定都有两个int类型的参数吧,对吧,那么可能我的参数列表是不一样的,那也就意味着我们不能严格的要求你的参数列表,所以说呢,这个位置我们也就不能写的具体了,我们应该怎么写呢?哎,两个两点。
02:29
明白吧,这两个点点代表什么呢?代表的就是任意参数列表,有参数也行,没参数也行,有多个也行,然后呢,各种类型的都是可以的,听懂了吧,还有一个问题就是什么呀,我的每个方法不一定都是public int类型的反馈值吧,对吧?所以说呢,我们可以把前面的这两个呢,诶统一把它写成一个型,代表的就是任意修饰符,任意啊返回值类型,听明白这个意思了吧,OK,好,如果说你还想再通用一点,比如说现在的话呢,就相当于它会用到我这个包下面的这个类中的所有的方法吧,对吧?那假如说我想作用到这个包下面所有的类上面怎么办呢?你把这个类也给它改成小,听懂了吧,所以说现在我们写的这个求点表达式啊,那就特别通用了,解释一下啊,它的这个含义,呃,第一个星我们代表的是什么意思啊,就是任意。
03:30
也修饰符,哎,任意啊参数啊任意啊返回值啊,第二个星呢,任意,哎,那就是任意类了,对吧,第三个呢,任意方法,那就是什么任意啊方法好那么这个点点呢,任意参,哎就是什么任意啊参数列表,那这个就特别通用了,听明白了吧,诶任意看出列表啊好,那么这个写好,写好以后的话,我们来说一下,它是在我们的后置通知嘛,那就是我们的目标方法执行之后执行,但是呢,他不管你的方法有没有抛出异常好输出我们这一段来写一下,写什么东西呢?我们来写一下cso,好输出一下,输出什么东西啊,输出我们的还是loging好,Aspect,然后呢,我们来写一下,就说你这个method啊,你看我们这。
04:30
这地方的话,我们就希望获取一下这个方法的名字是吧?那怎么获取方法的名字呢?大家注意,我们就可以在我们的方法里面注意这个地方也行啊,一会儿我会给它补上,我们在这里面呢,可以用到一个对象,什么对象呢?叫做连接点对象,好连接点对象就是我们的join point,好,你直接在这个方法里面去把它声明出来就可以了,Join point,然后呢,Join point直接把它声明出来,那么声明出来了以后呢,我们就可以从这个连接点对象里面获取我们想要的信息,比如说我现在想获取啊方法的名字啊,那么怎么获取呢?比如说method name,就等于draw point,它里面有一个get什么呀,注意哈,这里面不能直接获取方法的名字,而是有一个signature,看到没有,这个的意思就是方法签名,那么在方法签名里面,我们可以get name,这就获取到我的方法的名字。
05:30
了,能明白这个意思吧,OK,这就获取的方法的名字了,好,那这个位置的话,我就可以写成什么了呢?写成加上一个method的内容,再加上一个什么呀,比如说结束了,听懂了吧?好,那么可能有同学想说,诶,那你结束了以后你应该有结果呀,是不是?哎,大家还是要注意了啊,就是在目标方法执行之后执行,呃,不管目标方法有没有抛出异常,但是呢,它不能获取方法的结果,理解了吧,就是这个通知获取不到方法的结果的,听明白这个意思了吗?哎,如果你想获取方法的结果啊,那么我们得去讲下一个通知,叫做返回通知才是可以的,好吧,OK,那么这个地方我们提到的这个join块D,那么你来看一下,我们把上面这个通知呢,也顺带再给它重新写一下,你看我也加上join point好,那么在上面这个通知里面的话呢,其实我既想获取方法名。
06:30
是不是还想获取这个参数啊,对吧,你看我就可以怎么写的呢?先来获取我们方法的参数好,怎么获取呢?就是join point里面呢,有一个get up,这就是方法的参数,它返回的是一个object object类型的一个什么数组好,那么对于这个方法名的获取来说,它就是一样的,来,你把它直接拷贝过来用就行了,这就是我们获取我们的方法名名字好,那把这个写好以后的话,我们这个位置就可以变一下了啊,双引号加上我们的method name,那么后面的话,我们再什么with什么呀,With,我们再加上什么as list,把这个X放进去是不是相等,因为你数组的话,你不好直接去打印嘛,那我就通过什么直接给它转成一个集合来打印,打印出来的话,不就是我们这个中括号中括号元素逗号元素嘛,对吧?哎,通过这种格式给它打印出来,好吧,那我顺带就把这个给它重构了一下啊,就是我们的这个连接点对象来吧,那么这个写好以后呢,我们再来做一个测试那。
07:30
那么现在回再回到这个位置,我们再来运行一下,大家要注意了啊,哎,你就能看到啊,我的这个点一下是吧,能看到,你看我在执行我这个方法的时候,前置通知,你看是不是ad方法呀,它是不是通过一跟一来加的对吧?我们这个位置不传来的一跟一嘛,对不对,它就能获取到了,然后呢,并且我们能看到这个后置通知是不是也是有的。看到了吧,后置通知是不是也作容上去了,OK,好,那么这就是我们的一个后置通知,那么在这个里面的话呢,我们顺带再给大家去说了一下这个连接点对象理解了吧,OK,这就是我们后置通知它的一个用法啊呃,然后呢,呃,再来说一下吧,啊还有一个东西没有给大家去演示啊,就是呃,我们说过他这个不管方法有没有抛出异常,它都会执行吧,对吧,那我们再来给大家演示一下这个效果,呃,那我就这么来做,我再去调用一个AC点二就是除法嘛,对吧,那比如说五除个零。
08:31
有异常没有异常了吗?好,这个时候啊,我们也可以来输出一下这个结果啊,如果你正常执行的话呢,那么你肯定是有结果的,如果你要出异常了,那肯定就没有结果了,好来把这个再来试一下,运行一下,OK,大家来看这个效果啊,我得点一下是吧。哎,这个这工具真的是。没办法了啊,我得重新启动一下这个工具。
09:01
也不出来了,你看到没?行吧,那稍等一下啊,我把这个工具重新启动一下啊,哎,出来了是吧,那先看到这个结果吧,来那我们来看一下现在我们来看到的什么呀?诶这个正常的话,你看这个是后置通知也是有的吧,而我们第二个方法,你看我们在调用的时候呢,它这个后置通知是不是也是有的,对不对?哎,你看出异常了以后,后置同时呢,也是有的能看懂吧。看明白了吧?OK,那么可能有同学在想,诶,前置通知咋没有啊?有前置通知要出异常,哎,因为我的前置通知我就仅仅作用到abd方法上面嘛,是不是我有没有把这个前置通知作用到我这个第五方法上面啊,有没有作用到它上面没有,如果说你也作用到它上面的话,那么前置通知你也是能看得到的啊,但是这个地方我主要想给大家演示的就是什么呀,当你抛出异常以后呢,诶,它的这个后置通知呢,也是有的,你看到没有,这个Di有的方法看明白了吧?OK啊,这就是我们的一个后置通知啊。
我来说两句