在前面的学习中,已经对AOP的代理对象的创建过程有了比较深入的理解。今天来看下,AOP代理对象的执行过程。
JDK代理的invoke
使用JdkDynamicAopProxy创建代理对象,原理是通过Proxy,newProxy来实现,上篇文章中已经注意到传入了this作为方法处理器,因为JdkDynamicAopProxy实现了InvocationHandler,因为通过JDK实现的代理对象,它的方法调用会被JdkDynamicAopProxy的invoke方法拦截:
在invoke方法中我们只需要关注以下几行代码:
if (chain.isEmpty()) {
// We can skip creating a MethodInvocation: just invoke the target directly
// Note that the final invoker must be an InvokerInterceptor so we know it does
// nothing but a reflective operation on the target, and no hot swapping or fancy proxying.
Object[] argsToUse = AopProxyUtils.adaptArgumentsIfNecessary(method, args);
retVal = AopUtils.invokeJoinpointUsingReflection(target, method, argsToUse);
}
else {
// We need to create a method invocation...
invocation = new ReflectiveMethodInvocation(proxy, target, method, args, targetClass, chain)