@Around环绕增强

虽然Around功能强大,但通常需要在线程安全的环境下使用。因此,如果使用普通的Before、AfterReturing增强方法就可以解决的事情,就没有必要使用Around增强处理了。

Proceedingjoinpoint 继承了 JoinPoint 。是在JoinPoint的基础上暴露出 proceed 这个方法。proceed很重要,这个是aop代理链执行的方法。暴露出这个方法,就能支持 aop:around 这种切面(而其他的几种切面只需要用到JoinPoint,这跟切面类型有关), 能决定是否走代理链还是走自己拦截的其他逻辑

一、项目结构

二、定义切面类、连接点注解类


PointCut连接点注解类

说明:

这是一个注解类型:@interface

类中设置了一个methodName属性;


定义切面类

说明:

  • @Around定义了此方法为 Around增强处理方法;
  • @annotation(around):参数around应该与增强处理方法中的参数名保持一致,该声明指定了pointcut连接点,也可以使用其他方式,如:

 pointcut="execution(* org.crazyit.app.service.impl.*.*(..))";

  • point.proceed()调用了目标方法,并获取其返回值;

三、为待增强的方法--添加注解声明

在上面定义@Around增强时,通过@annotation() 方式指定了pointcut,其中方法参数为连接点注解类aroundAuthority

如果需要对某一方法进行增强,只需要在相应的方法上添加上此注解即可,如下:

 

四、AspectJ配置文件

 

五、测试类

六、测试结果

可能的输出结果:



 



 

posted @ 2018-12-03 22:04  車輪の唄  阅读(21)  评论(0编辑  收藏  举报  来源