环绕通知 ‹aop∶around›

Exisi 2022-11-28 08:35:42
Categories: Tags:


语法

<aop:around method="执行方法" pointcut="切入表达式"/>

<aop:around method="执行方法" pointcut-ref="切入表达式id" />

 

参数

描述

method

在通知类中设置当前通知类别对应的方法

pointcut

设置当前通知对应的切入点表达式,不能同时使用pointcut-ref

pointcut-ref

设置当前通知对应的切入点id,不能同时使用pointcut

示例

<aop:aspect ref="adviceId">

    <!--直接配置切入点-->

    <aop:around method="permissionAdvice" pointcut="execution(* com.exi.service.PermissionAdvice.*.*(..))"/>

</aop:aspect>

 

<aop:pointcut id="pt" expression="execution(* com.exi.service.PermissionAdvice.*.*(..))"/>

<aop:aspect ref="adviceId">

    <!--使用公共切入点-->

    <aop:around method="permissionAdvice" pointcut-ref="pt"/>

</aop:aspect>

 

public class PermissionAdvice {

  

    public Object permissionCheck(ProceedingJoinPoint joinPoint) throws Throwable {

        System.out.println("===================开始增强处理===================");

 

        //获取请求参数,详见接口类

        Object[] objects = joinPoint.getArgs();

        Long id = ((JSONObject) objects[0]).getLong("id");

        String name = ((JSONObject) objects[0]).getString("name");

        System.out.println("id1->>>>>>>>>>>>>>>>>>>>>>" + id);

        System.out.println("name1->>>>>>>>>>>>>>>>>>>>>>" + name);

 

        // 修改入参

        JSONObject object = new JSONObject();

        object.put("id", 8);

        object.put("name", "lisi");

        objects[0] = object;

        

        // 将修改后的参数传入,joinPoint.proceed()为目标对象执行原结果

        return joinPoint.proceed(objects);

    }

}

 

运行结果: