Advice 直译为通知,也有人翻译为 “增强处理”,共有 5 种类型,如下表所示。
通知类型注解说明before(前置通知)@Before通知方法在目标方法调用之前执行after(后置通知)@After通知方法在目标方法返回或异常后调用after-returning(返回通知)@AfterReturning通知方法会在目标方法返回后调用after-throwing(异常通知)@AfterThrowing通知方法会在目标方法抛出异常后调用around(环绕通知)@Around通知方法会将目标方法封装起来 二、环境准备 添加AOP依赖在pom.xml文件里添加Spring AOP和AspectJ的jar包依赖
创建目标接口和实现类 创建通知类创建通知类,并指定切入点
创建Spring核心配置类 编写运行程序 三、添加通知 普通通知在MyAdvice这个通知类中添加前置通知、后置通知、返回后通知、异常后通知及相关注解。
观察运行App程序后的截图,发现并没有显示异常后通知
手动在save()方法中添加一行代码:int i = 1/0,造成异常后再次运行App。
发现异常后通知有了,但是运行后通知却消失了。
综上所述: 前置通知和后置通知是一定会执行的,而返回后通知是需要在原始方法正常执行后才会被执行,异常后通知是需要原始方法抛出异常才会被执行
环绕通知(重点)环绕通知是非常强大的通知,能够完成上述四种通知的所有功能。
修改App类,调用UserDao的update()方法,运行程序,观察结果。
运行结果如下
注意点
使用环绕通知必须传入形参ProceedingJoinPoint,并使用pjp.proceed()方法实现对原始方法的调用,进而实现原始方法调用前后同时添加通知
通知中如果未使用使用pjp.proceed()方法实现对原始方法的调用,则将跳过原始方法的执行
原始方法的返回值类型决定环绕通知的返回值类型。原始方法若不接收返回值,通知方法的返回值类型可以设置成void,也可以设置成Object;如果接收返回值,最好设定为Object类型。
由于无法预知原始方法运行后是否会抛出异常,因此环绕通知方法必须要处理Throwable异常
以上就是一文搞懂Spring AOP的五大通知类型的详细内容,更多关于Spring AOP通知类型的资料请关注七叶笔记其它相关文章!