AOP环绕通知和自定义注解实际应用

在使用aop需要在spring.xml和springmvc.xml配置文件中开启代理

 <!--开启代理-->
 <aop:aspectj-autoproxy/>

注解类

@Component
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AsynchronousExceptionHandler {
    String value() default "";
    String returnType() default "";
}

通知类

1.用来处理异常判断返回不同JSON

@Aspect
@Component
public class AsynchronousExceptionAdvice {

    /**
     * 环绕通知
     * @param joinPoint
     * @param asynchronousExceptionHandler
     * @return
     */
    @Around("@annotation(asynchronousExceptionHandler)")
    public Object around(ProceedingJoinPoint joinPoint, AsynchronousExceptionHandler asynchronousExceptionHandler){
        String value = asynchronousExceptionHandler.value();
        System.out.println(value+"环绕通知起作用了");
        Object result = null;
        try {
            result=joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            try {
                if (throwable instanceof AccessDeniedException) {
                    return DataResults.fail(ResultCode.NO_RIGTHS);//403
                }else {
                    return DataResults.fail(ResultCode.FAIL);//500
                }
            }catch (Exception e) {
                e.printStackTrace();
            }
        }

        return result;
    }
}

2.当前端同步异步混乱时 可以根据使用 设置注解returnType参数进行判断

@Aspect
@Component
public class AsynchronousExceptionAdvice {

    /**
     * 环绕通知
     * @param joinPoint
     * @param asynchronousExceptionHandler
     * @return
     */
    @Around("@annotation(asynchronousExceptionHandler)")
    public Object around(ProceedingJoinPoint joinPoint, AsynchronousExceptionHandler asynchronousExceptionHandler){
       String returnType = asynchronousExceptionHandler.returnType();
       if ("DataResults".equals(returnType)){
           //.....
       }else if ("String".equals(returnType)){
           //.....
       }else {
           //.....
       }
       return null;
    }
}

注解的使用

@AsynchronousExceptionHandler(returnType="DataResults",value = "5")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值