Spring深度解析-14、AOP代理对象的执行过程分析

本文深入探讨了AOP代理对象在JDK和CGLIB下的执行过程。JDK代理通过`JdkDynamicAopProxy.invoke`方法拦截调用,若无拦截器则直接反射执行目标方法。CGLIB则是利用`DynamicAdvisedInterceptor.intercept`,同样根据拦截器链执行。两者在执行目标方法方式和性能上有细微差别。
摘要由CSDN通过智能技术生成

在前面的学习中,已经对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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值