欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java 动态代理 [Java Dynamic Proxy],

来源: javaer 分享于  点击 18488 次 点评:203

java 动态代理 [Java Dynamic Proxy],


java 动态代理 [Java Dynamic Proxy]

此次java动态代理实验所要用到的java里的包是java.lang.reflect中的一些类,主要是以下几个:
java.lang.reflect.Proxyjava.lang.reflect.InvocationHandlerjava.lang.reflect.Method等等。

第一步

首先要定义一个接口(interface)以及其实现类,因为java动态代理的实现必须是该类实现了一个或多个接口,而一个没有实现接口的java类也可以通过像cglib一类的类库来实现。

新建一个MyInterface接口:

public interface MyInterface {

    String say(String str);
}

其实现类MyInterfaceImpl:

public class MyInterfaceImpl implements MyInterface {
    @Override
    public String say(String str) {
        return str;
    }
}

第二步

定义一个自己的handler,实现InvocationHandler接口,InvocationHandler接口中只有一个方法invoke,如下所示:

package java.lang.reflect;

public interface InvocationHandler {
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
}

动态代理的关键就在于此。

MyHandler代码如下:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyHandler implements InvocationHandler {

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        return method.invoke(new MyInterfaceImpl(),args);
    }

}

第三步 编写测试类

import java.lang.reflect.Proxy;

public class TestProxy {

    public static void main(String[] args) {

        MyHandler handler = new MyHandler();

        MyInterface instance = (MyInterface) Proxy.newProxyInstance(MyInterface.class.getClassLoader(),new Class[]{MyInterface.class},handler);

        System.out.println(instance.say("success........."));
    }
}

运行以上代码,结果如下:


success.........

Process finished with exit code 0

第四步 总结

经过以上几个步骤,也可以总结下了,java动态代理的运行的具体过程是如何的。

1,创建代理对象 instance

2,通过instance调用say()方法,此时首先找到代理对象相应的handler,在本文是MyHandler,再调用去其invoke()方法,最后返回结果。

相关文章

    暂无相关文章
相关栏目:

用户点评