动态代理

Jdk的动态代理

假设 一个客户要去公司去商谈业务,跟商务人员交谈,成功了 程序员进行操作,客户通过商务访问程序员

商务人员:代理对象

程序员:真实对象

创建一个接口  然后去现实里面的invoke()方法

//proxy 代理对象, method:真实对象的方法 ,args参数

invoke(Object proxy, Method method, Object[] args)

,然后绑定代理对象与真实对象的关系,target 真实对象

target.getClass().getClassLoader()获取真实对象的类加载器

获取真实对象实现了哪些接口,让当前代理对象下挂在这些接口中

return   Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);

main方法中

创建 真实对象

HelloWorldIpml hwi = new HelloWorldIpml();

为真实对象绑定代理关系,生成一个代理对象

JdkDynamicProxy jdp = new JdkDynamicProxy();

IHelloWorld hw = (IHelloWorld) jdp.bind(hwi);



CGLIB 动态代理

实现接口MethodInterceptor  里面的方法  intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy)

然后 

methodProxy.invokeSuper(proxy, args);

绑定关系

public Object getDynamicProxy(Class clz){

// Enhancer增强类

Enhancer enhancer = new Enhancer();

enhancer.setSuperclass(clz);

//设置回调

enhancer.setCallback(this);

//创建代理对象

return enhancer.create();

}


main  方法中

CglibDynamicProxy cdp = new CglibDynamicProxy();

HelloWorld hw = (HelloWorld) cdp.getDynamicProxy(HelloWorld.class);

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容