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")


版权声明:本文为qq_18980147原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。