@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配置文件
六、测试结果
可能的输出结果: