JDK动态代理 Proxy#newProxyInstance源码分析
本篇是结合JDK动态代理的实现----详细易懂继续讲的:
下面是Proxy#newProxyInstance的源码,写注释的地方就是我们要关注的地方:
@CallerSensitive
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)throws IllegalArgumentException
{
Objects.requireNonNull(h);
//复制一份接口的Class对象
final Class<?>[] intfs = interfaces.clone();
final SecurityManager sm = System.getSecurityManager();
if (sm != null) {
checkProxyAccess(Reflection.getCallerClass(), loader, intfs);
}
//获取代理类(!!!这里代理类,不是代理对象)
Class<?> cl = getProxyClass0(loader, intfs);
try {
if (sm != null) {
checkNewProxyPermission(Reflection.getCallerClass(), cl);
}
//通过Class对像拿到相应的构造器(这里的参数就是InvocationHandler)
final Constructor<?> cons = cl.getConstructor(constructorParams);
final InvocationHandler ih = h;
if (!Modifier.isPublic(cl.getModifiers()))<