AOP注解:
(1)@Pointcut:在使用其他注解时,需要写包的表达式,而@Pointcut就是用来声明一样的包路径,已达到代码简便
@Pointcut("execution(public Integer com.msb.service.MyCalculcator.*(Integer,Integer))")
public void myPointCut(){ }
(2)@Acound:环绕通知
//环绕通知
@Around(value = "myPointCut()")
public Object around(ProceedingJoinPoint proceedingJoinPoint){
//获取方法名
Signature signature = proceedingJoinPoint.getSignature();
//获取方法信息
Object[] args = proceedingJoinPoint.getArgs();
Object result = null;
try {
//前置通知
System.out.println("环绕通知strat:"+signature.getName()+"方法开始执行,参数为:"+ Arrays.asList(args));
//通过反射的方式调用目标的方法,相当于执行method.invoke(),可以自己修改结果值
result = proceedingJoinPoint.proceed(args);
//返回通知:返回执行结果之后执行
System.out.println("环绕通知stop:"+signature.getName()+"方法执行结束");
}catch (Throwable throwable) {
//异常通知
System.out.println("环绕异常通知:"+signature.getName()+"出现异常");
}finally {
//后置通知:在方法执行结束之后执行
System.out.println("环绕返回通知:"+signature.getName()+"方法返回结果:"+result);
}
return result;
}
(3)关于两个切面类的执行顺序:若有多个切面类,执行的时候按照的顺序:执行顺序是按照类名的首字符,越小越优先,可以用@Order(数字)注解,数字越小越优先
关于AOP学习源码链接:源码下载



