spring 自定义注解与AOP配合使用
自定义注解类
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ZiDingYi {
String action() default "-1";
}
解类使用
@ZiDingYi(action = "baoWen")
@ResponseBody
@PostMapping("/baoWen")
public AjaxResult baoWen(@RequestBody String apiRequestJson) {
return AjaxResult.success();
}
切面类
@Component
@Aspect
public class ZiDingYiAspect {
@Pointcut("@annotation(com.springboot.ZiDingYi)")
private void pointcut() {}
@Before("pointcut()")
public void sayHello(){
System.out.println("注解类型前置通知");
}
@After("pointcut()")
public void sayGoodbey(){
System.out.println("注解类型后置通知");
}
@Around("pointcut() && @annotation(ziDingYi)")
public void sayAround(ProceedingJoinPoint joinPoint, ZiDingYi ziDingYi) throws Throwable{
String action = apiQuanXianSource.action();
Object[] args = joinPoint.getArgs();
LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
String[] paramNames = u.getParameterNames(method);
if (args != null && paramNames != null) {
String params = "";
for (int i = 0; i < args.length; i++) {
params += " " + paramNames[i] + "=" + args[i];
}
System.out.println("入参:" + params);
}
String declaringTypeName = joinPoint.getSignature().getDeclaringTypeName();
System.out.println("类名:" + declaringTypeName);
String methodName = joinPoint.getSignature().getName();
System.out.println("方法名:" + methodName);
if(有误){
return AjaxResult.error("您没有执行该操作权限!");
}
return joinPoint.proceed();
}
}
------------------------------------------------------------------------