美文网首页
java中的动态代理

java中的动态代理

作者: 晨雪落客 | 来源:发表于2019-04-28 17:23 被阅读0次

    一个典型的动态代理可分为以下四个步骤:

    1.创建抽象角色

    2.创建真实角色

    3.通过实现InvocationHandler接口创建中介类

    4.通过场景类,动态生成代理类

    package proxy.test;

    //抽象角色

    public interface Icode {

    void doSomething(String name);

    }

    package proxy.test;

    //真实角色

    public class JavaCode implements Icode{

    private  String jname;

    public JavaCode(String jname){

    this.jname = jname;

    }

    @Override

    public void doSomething(String name) {

    System.out.println(jname+" implemented name "+name+" in JavaCode!");

    }

    }

    //动态代理类(一个位于代理类与委托类之间的中介类),需要实现InvocationHandler接口

    public class CoderDynamicProxy implements InvocationHandler{

    //被代理的实例

    private  Icode code;

    public CoderDynamicProxy(Icode code){

    this.code = code;

    }

    @Override

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

    System.out.println("代理前:"+System.currentTimeMillis());

    Object result = method.invoke(code, args);

    System.out.println("代理后:"+System.currentTimeMillis());

    return result;

    }

    }

    import java.lang.reflect.InvocationHandler;

    import java.lang.reflect.Proxy;

    public class DynamicProxyTest {

    public static void main(String[] args) {

    //要代理的真实的对象

    Icode code = new JavaCode("张三_java");

    //创建代理类实例

    InvocationHandler hander = new CoderDynamicProxy(code);

    //获取类加载器

    ClassLoader cl= Icode.class.getClassLoader();

    //动态产生一个代理类

    Icode  proxy = (Icode) Proxy.newProxyInstance(cl,code.getClass().getInterfaces(),hander);

    //通过代理类执行Javacode具体实现的doSomething()方法

    proxy.doSomething("update project");

    }

    }

    相关文章

      网友评论

          本文标题:java中的动态代理

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