package com.leave.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.core.LocalVariableTableParameterNameDiscoverer; import org.springframework.stereotype.Component; import java.lang.reflect.Method; /** *描述: *@auter yangnan *@create 2022/4/19 15:54 */ @Aspect //切面容器 @Component //把类加入到容器中 public class AspectAOP { /** *@before: 前置通知,在方法执行之前执行。 *@After:后置通知,在方法执行后执行。 *@AfterReturning: 返回通知,在方法返回结果之后执行。 *@AfterThrowing:异常通知,在方法抛出异常之后执行。 *@Around:环绕通知,围绕着方法执行。 */ // 匹配AspectController类下面的所有共有方法。 // 第一个* 代表任意返回值 // 第二个* 当表任意方法 //(..) 代表任意参数 @Pointcut("execution(public * com.leave.aspect.AspectController.*(..))") public void log(){ System.out.println("不进入 log()"); } @Before("log()") public void before(JoinPoint joinPoint){ 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); } @After("log()") public void after(JoinPoint joinPoint){ System.out.println("执行注解注释的方法后执行此方法"); } }
版权声明:本文为GuangXi_YangNan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。