AOP的通知类型共五种:
- 前置通知:原始方法执行前执行,如果通知中抛出异常,组织原始方法运行
- 应用:数据校验
- 后置通知:原始方法执行后执行,无论原始方法中是否抛出异常,都将执行通知
- 应用:现场清理
- 返回后通知:原始方法正常执行完毕并返回结果后执行,如果原始方法抛出异常,无法执行
- 应用:返回值相关数据处理
- 抛出异常后通知:原始方法抛出异常后执行,如果原始方法没有抛出异常,无法执行
- 应用:对原始方法中出现的异常信息进行处理
- 环绕通知:在原始方法执行前后均有对应执行执行,还可以阻止原始方法的执行
- 应用:十分强大,可以做任何事
<aop:config>
<aop:pointcut id="pt" expression="execution(* *..*(..))"/>
<aop:aspect ref="myAdvice">
在原始方法前
<aop:before method="before" pointcut-ref="pt"/>
在原始方法后
<aop:after method="after" pointcut-ref="pt"/>
在原始返回之后
<aop:after-returning metheturning method="afterReturing" pointcut-ref="pt"/>
在原始方法报错
<aop:after-throwing method="afterThrowing" pointcut-ref="pt"/>
环绕通知
<aop:around method="around" pointcut-ref="pt"/>
</aop:aspect>
</aop:config>
环绕通知使用:
public void around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("around before");
// 对原始方法的调用
pjp.proceed();
System.out.println("around after");
}
必须对原始方法进行调用,使用形参ProceedingJoinPoint,pjp.proceed();调用原始方法,否则原始方法不执行