Spring--08--JoinPoint的用法

JoinPoint 对象

JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象.

常用api:

Spring--08--JoinPoint的用法_第1张图片

  • 目标方法名为 = joinPoint.getSignature().getName());
  • 目标方法所属类的简单类名=joinPoint.getSignature().getDeclaringType().getSimpleName());
  • 目标方法所属类的类名=joinPoint.getSignature().getDeclaringTypeName();
  • 目标方法声明类型=Modifier.toString(joinPoint.getSignature().getModifiers();

案例:

需求
获取目标对象的相关信息.

1.获取目标方法的路径 包名.类名.方法名
2.获取目标方法的类型 class
3.获取传递的参数
4.记录当前的执行时间

@Aspect     //我是一个AOP切面类
@Component  //将类交给spring容器管理
public class CacheAOP {

 
    @Pointcut("bean(itemCatServiceImpl)")
    public void pointCut(){

 
    @Before("pointCut()")
    public void before(JoinPoint joinPoint){
        String className = joinPoint.getSignature().getDeclaringTypeName();
        String methodName = joinPoint.getSignature().getName();
        Class targetClass = joinPoint.getTarget().getClass();
        Object[] args = joinPoint.getArgs();
        Long runTime = System.currentTimeMillis();
        
        System.out.println("方法路径:" +className+"."+methodName);
        System.out.println("目标对象类型:" + targetClass);
        System.out.println("参数:" + Arrays.toString(args));
        System.out.println("执行时间:" + runTime+"毫秒");
    }

ProceedingJoinPoint对象

ProceedingJoinPoint对象是JoinPoint的子接口,该对象只用在 @Around 的切面方法中,.

两个方法:

  • Object proceed() throws Throwable //执行目标方法
  • Object proceed(Object[] var1) throws Throwable //传入的新的参数去执行目标方法

环绕通知说明

注意事项:

  1. 环绕通知中必须添加参数ProceedingJoinPoint
  2. ProceedingJoinPoint只能环绕通知使用
  3. ProceedingJoinPoint如果当做参数 则必须位于参数的第一位
@Aspect     //我是一个AOP切面类
@Component  //将类交给spring容器管理
public class CacheAOP {
    @Pointcut("execution(* com.jt.service..*.*(..))") //方法参数级别
    public void pointCut(){}

     @Around("pointCut()")
    public Object around(ProceedingJoinPoint joinPoint){
        System.out.println("环绕通知开始!!!");
        Object result = null;
        try {
            result = joinPoint.proceed();    //执行下一个通知或者目标方法
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("环绕通知结束");
       return result;
    }     
    }

你可能感兴趣的:(Spring基础知识--SSM,spring,java,后端)