Java

动态代理

2017-12-04  本文已影响0人  Xr丶_c967

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);

上一篇 下一篇

猜你喜欢

热点阅读