动态代理

作者: Xr丶_c967 | 来源:发表于2017-12-04 12:28 被阅读0次

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

    相关文章

      网友评论

        本文标题:动态代理

        本文链接:https://www.haomeiwen.com/subject/yhhevxtx.html