spring--aop_2_源码分析之CglibAopProxy实现

本文深入探讨Spring AOP中的CglibAopProxy,通过ObjenesisCglibAopProxy.getProxy()方法生成代理对象。CGLIB利用Enhancer创建目标类的子类,并结合DynamicAdvisedInterceptor实现AOP。DynamicAdvisedInterceptor作为MethodInterceptor,在intercept()方法中执行拦截逻辑,与JdkDynamicAopProxy的invoke()方法类似,但使用CglibMethodInvocation进行方法调用。
摘要由CSDN通过智能技术生成

接着上一篇 https://blog.csdn.net/convict_eva/article/details/81084833
DefaultAopProxyFactory.createAopProxy() 方法生成AopProxy 代理对象。
AopProxy 有两个实现类 JdkDynamicAopProxy,CglibAopProxy。上一篇说的是JdkDynamicAopProxy,这里说 CglibAopProxy
 

@Override
public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
	if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) {
	
		//目录对象的class
		Class<?> targetClass = config.getTargetClass();
		
		//没有目标对象抛出异常
		if (targetClass == null) {
			throw new AopConfigException("TargetSource cannot determine target class: " +
					"Either an interface or a target is required for proxy creation.");
		}
		//targetClass 是接口类,使用 JDK来生成 Proxy
		if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) {
			return new JdkDynamicAopProxy(config);
		}
		//如果不是接口类,使用CGLIB 生成代理对象
		return new ObjenesisCglibAopProxy(config);
	}
	else {
		return new JdkDynamicAopProxy(config);
	}
}

CglibAopProxy 也是AopProxy 的实现,CglibAopProxy 也是 ObjenesisCglibAopProxy 父类,所以入口方法就是 ObjenesisCglibAopProxy.getProxy()方法
这个方法在CglibAopProxy 实现的

CglibAopProxy.getProxy() 源码:

@Override
public Object getProxy(@Nullable ClassLoader c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值