java 动态代理 [Java Dynamic Proxy],
分享于 点击 18488 次 点评:203
java 动态代理 [Java Dynamic Proxy],
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()方法,最后返回结果。
相关文章
- 暂无相关文章
用户点评