Spring的AOP 这里我就不做过多的介绍了,最近看项目上的大神使用注解的形式实现AOP,完成业务上的权限管理和密钥验签,学习了一下 特来记录一下:
1 自定义注解
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface OperateAuth { String OperateName() default "测试"; String OperateDetail() default "测试AOP"; }
2、定义切面
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Aspect @Order(100000) @Component public class OperateAuthAspect { // 只要使用了@OperateAuth 注解的地方 都会走AOP的逻辑 @Pointcut("@annotation(operateAuth)") public void checkAuth(OperateAuth operateAuth) { } @Around("checkAuth(operateAuth)") public Object aspect(ProceedingJoinPoint proceedingJoinPoint, OperateAuth operateAuth) throws Throwable { Object[] args = proceedingJoinPoint.getArgs(); System.out.println("<******** this is auth aop *********>"); return proceedingJoinPoint.proceed(); } }
3、在需要AOP实现的public方法上加注解
@OperateAuth @Override public CommentResponse<Question> getQuestionById(Question question) { /** 这实现具体的业务逻辑 **/ }
4、验证结果
总结:这种方式实现的AOP 使用起来更加的灵活方便,只需要在需要的地方加上自定义的注解即可!!!!