java的动态代理机制详解

java的动态代理机制:

jdk的proxy代理:

首先实现InvocationHandler接口,在实现类中注入目标对象。

在通过

Subject proxySubject = (Subject)Proxy.newProxyInstance(subject.getClass().getClassLoader(),subject.getClass().getInterfaces(),handler);

生成代理对象。如下图:

java的动态代理机制详解_第1张图片

代理对象生成过程: 

1、根据Class cl = getProxyClass0(loader, intfs);生成Poxy的class。

2、final Constructor cons = cl.getConstructor(constructorParams); 获取proxy的构造方法。

3、cons.newInstance(new Object[]{invocationHandler}); 传入InvocationHandler的实现类,生成proxy代理对象。

上面第一步生成的proxy类是重新组装的类。继承了Proxy,实现了目标对象的接口。所以生成的代理proxy上继承了proxy的InvocationHandler的实现类对象,并且InvocationHandler的实现类上绑定了目标对象。结构如下:

java的动态代理机制详解_第2张图片

java的动态代理机制详解_第3张图片

java的动态代理机制详解_第4张图片

 

第二种动态代理:CGLIB,可以对没有实现接口的类进行代理。

原理类似,只不过生成的代理类是继承了目标对象,而不是实现接口

你可能感兴趣的:(每天积累一点点)