- 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/
转载文章受原作者版权保护。转载请注明原作者出处!