(一) 各种增强
public void dowork(){
1.前置增强
try{
//业务代码
2.后置增强
}catch(Exception e){
//异常处理
3.异常增强
}finally{
//释放资源
4.最终增强
}
}
根据在连接点方法(Joinpoint,需要被增强的方法)中执行的时间不同,我们把增强划分为五种情况:
before:前置增强 被增强方法执行之前执行 权限控制,日志记录等
after-returning:后置增强 被增强的方法执行之后,中途无异常 ,执行 提交事务/统计分析数据结果等
after-throwing:异常增强 被增强方法出现异常的时候执行 回滚事务/记录日志的异常信息
after:最终增强 被增强的方法无论是否有异常,最终都要执行的增强操作(finally) 释放资源等
around:环绕增强 可以自定义在被增强方法的什么时候执行(返回一个OBJECT,参数processedingJoinpoint) 缓存,性能日志,权限,事务管理。
(二) 增强参数
1.在增强方法中获取异常信息
<aop:after-throwing method = "rollback" pointcut-ref = "txPoint" throwing = "ex"/>
public void rollback(Throwable ex){
system.out.println("回滚事务" + ex);
}
2.获取被增强方法信息,并传递给增强方法。
Spring Aop 提供org.aspectj.lang.JionPoint类,作为增强方法的第一个参数
joinPoint:提供访问当前增强方法的真实对象,代理对象,方法参数等数据
ProceedingJoinPiony:JoinPoin的子类,只用于环绕增强中,可以处理被增强的方法
(1) 使用JoinPoint类:
public void begin(JoinPoint jp){
System.out.println("代理对象"+jp.getThis.getClass());
System.out.println("目标对象"+jp.getTarget.getClass());
System.out.println("被增强方法的参数"+Arrays.toString(jp.getArgs()));
System.out.println("当前连接点签名"+jp.getSignature());
System.out.println("当前连接点类型"+jp.getKind());
System.out.println("开启事务");
}
(2)使用ProceedingJoinPoint类;
public Object around(proceedingJoinpoint pjp){
Obiect ret = null;
}