在springAOP中,创建动态代理有两种方式,jdk的动态代理与cglib。
jdk的动态代理在springAOP中使用的是JdkDynamicAopProxy而cglib在springAOP中使用的类是Cglib2AopProxy,而且创建代理使用的类加载器基本都是ContextClassLoader类加载器。
在springAOP中创建动态代理都是通过ProxyFactory的getProxy()方法,如下:
@SuppressWarnings("unchecked")
public Object getProxy() {
return createAopProxy().getProxy();
}
我们先从jdk的动态代理JdkDynamicAopProxy开始看起
public Object getProxy() {
return getProxy(ClassUtils.getDefaultClassLoader());
}
public Object getProxy(ClassLoader classLoader) {
if (logger.isDebugEnabled()) {
logger.debug("Creating JDK dynamic proxy: target source is " + this.advised.getTargetSource());
}
Class[] proxiedInterfaces = AopProxyUtils.completeProxiedInterfaces(this.advised);
findDefinedEqualsA