美文网首页Spring
代理模式(二)

代理模式(二)

作者: 半数的年 | 来源:发表于2019-01-19 14:00 被阅读0次

延续代理模式(一)的内容

(2)、cglib动态代理原理()
image.png
  • JDK动态生成一个实现代理动作接口的代理对象,最后强制转换给代理类中的target,以供在调用invoke()时, 调用method.invoke(target,args)
  • Cglib动态生成一个被代理对象的子类,重写父类的方法。在调用实例化子类时,会调用super()创建父类的对象,并保存父类和子类的引用。methodProxy.invokeSuper(obj, objects);调用被代理对象方法
    @Override
    public Object intercept(Object obj, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        // obj 是被代理对象,由Cglib内部给创建的
        // methodProxy代理方法,代理方法所在的类是 obj
        // 在调用实例化子类时,会调用super()创建父类的对象,并保存其引用
        System.out.println("媒婆有大把资源,说出你想要的");
        methodProxy.invokeSuper(obj, objects);
        System.out.println("媒婆把联系方式给你,你可以谈恋爱了");
        return null;
    }

代理人

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;


public class DynamicMeiPo implements MethodInterceptor {


    public Object newInstance(Class clazz){
        Enhancer enhancer = new Enhancer();
        // 把父类设置为谁?
        enhancer.setSuperclass(clazz);

        enhancer.setCallback(this);
        return enhancer.create();
    }

    @Override
    public Object intercept(Object obj, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        // obj 是被代理对象由Cglib给创建的
        // 在调用实例化子类时,会调用super()创建父类的对象,并保存其引用
        System.out.println("媒婆有大把资源,说出你想要的");
        methodProxy.invokeSuper(obj, objects);
        System.out.println("媒婆把联系方式给你,你可以谈恋爱了");
        return null;
    }
}

被代理人

public class XiaoYuan {
    public void findLove() {
        System.out.println("小元要找短头发、可爱的女生");
    }
}

相关文章

  • 代理模式

    一、代理模式介绍 二、代理模式代码实例

  • 第4章 结构型模式-代理模式

    一、代理模式简介 二、代理模式3个角色 三、代理模式的优点 四、代理模式的实例(游戏代练)

  • 09.代理模式和装饰模式的区别

    代理模式和装饰模式 代理模式UML代理模式类图 装饰模式UML装饰模式类图从类图来看,二者除了名称不同,几乎没有差...

  • Java动态代理

    一,简介 在将动态代理之前,先按照我自己的理解来讲讲代理模式,和静态代理 二,代理模式 我们常常说代理模式是一种j...

  • Android代理模式基础讲解

    一、代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。 二、静态代理 静态代理的代理类持有被...

  • 代理模式(Proxy)

    代理模式和装饰模式非常类似,甚至代码都类似。二者最主要的区别是:代理模式中,代理类对被代理的对象有控制权,决定其执...

  • 代理模式

    一、代理模式 二、虚代理 三、智能代理 智能指针的使用,自动析构——

  • 代理模式(二)

    延续代理模式(一)的内容 (2)、cglib动态代理原理() JDK动态生成一个实现代理动作接口的代理对象,最后强...

  • 代理模式二

    远程代理 《Head First 设计模式》中讲,怎么毫无印象啊,再去看一遍,用 Java 内置的 RMI 举例,...

  • 设计模式

    单例模式 模板方法模式 工厂模式 代理模式 静态代理 JDK动态代理

网友评论

    本文标题:代理模式(二)

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