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()方法,最后返回结果。
相关文章推荐
- 安卓状态栏通知Notification,NotificationManager详解
- Eclipse远程调试JAVA程序
- Spring集成MyBatis
- JAva集合框架
- Java中两个List对比的算法
- 我读了struts文档
- Spring整合JMS(二)——三种消息监听器
- Play Framework 报错 java.sql.SQLException: Connection is closed!
- 集合
- eclipse 安装svn插件
- Java学习--最大公约数 && 最小公倍数
- Java设计模式_行为型_策略模式_工作还是休息
- Java中怎样将类对象自动排序,放入某个集合
- java转换unicode,筛选文件中的insert语句并把日期给转换为可以直接在数据库执行的语句
- FileUpload——在Struts2中上传文件
- Struts2常用标签
- Spring学习详解(1)——Spring入门详解
- Spring学习详解(1)——Spring入门详解
- JAVA加载外部资源库
- Spring整合JMS(一)——基于ActiveMQ实现