6、spring对通知方法的约束
6.1、Spring对通知方法不严格
例如:可以随意修改通知方法的访问权限符或者静态非静态属性,或者修改其返回值类型,也可以在方法体里面随意return任意值,这些都不会对结果有任何影响
运行结果:
6.2、spring对通知方法的唯一要求
通知方法里面的参数一定不能乱写
通知方法是spring利用反射调用的,每次方法调用得确定这个方法的参数表的值,参数表上的每一个参数,spring都得知道是什么
JoinPoint这个参数,spring是认识的,但是如果再写上一个别的spring不认识的参数,就会报错,如果我们还要传入一个参数的话,就必须告诉Spring,例如:返回值的异常的参数,就要在注解里面注明,然后再在通知方法里面传入这个参数,这样spring才认识。
6.3、补充
6.3.1、接收异常
在接收异常的信息的时候,一定要写明大的异常,如果写了小的异常,就有可能会接收不到异常信息,例如:
这里的将Exception改为NullPointException,再来看运行结果:
可以看到这里并没有捕获到异常,因为我们的除法异常是属于数学异常,而我们指定的是空指针异常,这里并不是空指针异常,所以就不能捕获到,所以异常一定要往大了写。
6.3.2、接收返回值
如果把接收的返回值的类型确定为某个类型,例如:
将原来的Object类型改为double类型,那除了double以外的返回值都是接收不到的,所以这里也要往大了写。
运行结果:这里的add方法由于最后的结果是int类型的,所以接收不到。