AOP注解:
(1)@Pointcut:在使用其他注解时,需要写包的表达式,而@Pointcut就是用来声明一样的包路径,已达到代码简便
@Pointcut("execution(public Integer com.msb.service.MyCalculcator.*(Integer,Integer))") public void myPointCut(){ }
//环绕通知 @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学习源码链接:源码下载
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)