第十六章 Spring动态代理详解

  • MethodInterceptor(方法拦截器)
public class Arround implements MethodInterceptor {

    /*
        invoke方法: 将额外功能书写在invoke方法中,额外功能可以运行在原始方法之前 之后 以及前后都可以运行

        MethodInvocation: 额外功能所增加的那个原始方法

        invocation.proceed()--->运行对应的原始方法
        由这个方法,就可以区分额外功能的运行时机:
                额外功能写在invocation.proceed()之前,表示先运行额外功能,再运行原始方法
                额外功能写在invocation.proceed()之后.表示先运行原始方法,再运行额外功能
                额外功能写在invocation.proceed()之前和之后,表示额外功能前后都执行

         返回值: Object: 原始方法的返回值
                invocation.proceed()代表原始方法的运行,我们只要返回该方法的执行结果即可

     */
    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {

        //额外方法
        Object proceed = invocation.proceed();
        //额外方法
        return proceed;
    }
}
Spring工厂配置与MethodBeforeAdvice一样

事务在原始方法执行之前之后,都要运行

额外功能可能运行在原始方法抛出异常的时候
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
    Object proceed = null;
    try {
        proceed = invocation.proceed();
    } catch (Throwable e) {
        System.out.println("原始方法抛出异常时运行额外方法!");
        e.printStackTrace();
    }
    return proceed;
}
MethodInterceptor影响原始方法的返回值:
    原始方法的返回值(invocation.proceed()),直接作为invoke方法的返回值返回,MethodInterceptor不会影响原始方法的返回值

    invoke方法中,不要将原始方法的返回值作为invoke方法的返回值返回即可

Original: https://www.cnblogs.com/suwuji/p/16508285.html
Author: 苏无及
Title: 第十六章 Spring动态代理详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612596/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球