您的位置:首页 > 编程语言 > Java开发

java 动态代理 [Java Dynamic Proxy]

2015-12-30 09:56 495 查看

java 动态代理 [Java Dynamic Proxy]

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

java.lang.reflect.Proxy
java.lang.reflect.InvocationHandler
java.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()方法,最后返回结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态代理+