————————————————————————————————————————————————————————————-
    获取参数的两种方式:

    方式一:
    首先要求原始方法有参

    使用形参JoinPoint jp,jp.getArgs()获取到参数数组
    ps:类似于父组件传参给子组件

    1. public class AOPAdvice {
    2. public void before(JoinPoint jp) {
    3. Object[] args = jp.getArgs();
    4. System.out.println("before..."+args[0]);
    5. }
    6. public void after(JoinPoint jp) {
    7. Object[] args = jp.getArgs();
    8. System.out.println("afterbefore..."+args[0]);
    9. }
    10. }

    方式二(不推荐):

    1. <aop:config>
    2. <aop:pointcut id="pt" expression="execution(* *..*(..))"/>
    3. <aop:aspect ref="myAdvice">
    4. <aop:after method="before1" pointcut="execution(* *..*(int)) &amp;&amp; args(x)" />
    5. </aop:aspect>
    6. </aop:config>

    使用args(x),x必须和通知方法形参名一致(配置文件和代码强绑定)。
    ————————————————————————————————————————————————————————————-
    获取返回值:
    afterReturing(返回值后运行)

    在通知消息中使用形参Object ret

    1. public void afterReturing(Object ret) {
    2. System.out.println("afterReturing...."+ret);
    3. }

    配置文件
    使用returning

    1. <aop:after-returning method="afterReturing" pointcut-ref="pt" returning="ret"/>

    around(环绕)

    1. public Object around(ProceedingJoinPoint pjp) throws Throwable{
    2. System.out.println("around before");
    3. // 对原始方法的调用
    4. Object ret = pjp.proceed();
    5. System.out.println("around after"+ret);
    6. return ret;
    7. }

    ————————————————————————————————————————————————————————————-
    获取返异常:
    after-throwing(报错后运行)

    配置文件中使用throwing参数

    1. <aop:after-throwing method="afterThrowing" pointcut-ref="pt" throwing="t"/>

    消息通知里使用Throwable t形参获取

    1. public void afterThrowing(Throwable t) {
    2. System.out.println("afterThrowing"+t.getMessage());
    3. }

    around(环绕)
    直接捕获异常操作

    1. public Object around(ProceedingJoinPoint pjp){
    2. System.out.println("around before");
    3. // 对原始方法的调用
    4. Object ret = null;
    5. try {
    6. ret = pjp.proceed();
    7. } catch (Throwable throwable) {
    8. System.out.println("around...exception..."+throwable.getMessage());
    9. }
    10. System.out.println("around after..."+ret);
    11. return ret;
    12. }