切面类切入点引入注解
@Aspect
@Component
@Pointcut("@annotation(com.test.aop.MyLog)")//切入点通过注解实现
private void pointcut(){}
@Around("pt()")环绕引用切入点
public Object Log(ProceedingJoinPoint joinPoint) throws Throwable {
//1. 获取 目标对象的类名 .
String className = joinPoint.getTarget().getClass().getName();
log.info("目标对象的类名:{}", className);
//2. 获取 目标方法的方法名 .
String methodName = joinPoint.getSignature().getName();
log.info("目标方法的方法名: {}",methodName);
//3. 获取 目标方法运行时传入的参数 .
Object[] args = joinPoint.getArgs();
log.info("目标方法运行时传入的参数: {}", Arrays.toString(args));
//4. 放行 目标方法执行 .
Object result = joinPoint.proceed();
//5. 获取 目标方法运行的返回值 .
log.info("目标方法运行的返回值: {}",result);
log.info("around after ...");
return result;
}
注解类
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) //指定实现的类型及运行时机
public @interface MyLog {
}
在使用的方法上加自定义注解@MyLog