首页 / JAVA / Java动态代理详解
Java动态代理详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java动态代理详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1641字,纯文字阅读大概需要3分钟。
内容图文
Java动态代理只对实现了接口方法的实现类有效,接口和实现类代码如下:
package com.coshaho.reflect; public interface Subject { String doSomething(); }
package com.coshaho.reflect; public class RealSubject implements Subject { @Override public String doSomething() { System.out.println("Execute Service."); return "Done"; } }
Java动态代理使用步骤:
1、 创建动态代理方法处理器(实现InvocationHandler接口);
package com.coshaho.reflect; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * 动态代理方法处理器 * @author coshaho * */ public class ProxyHandler implements InvocationHandler { /** * 需要被代理的类 */private Object obj; ProxyHandler(Object obj) { this.obj = obj; } /** * method: 代理类需要被调用的方法 * args: 动态代理类方法被调用时传入的参数 * proxy: 动态代理类自身,一般无用 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("Log: Service Begin."); Object result = method.invoke(obj, args); System.out.println("Log: Service Done."); return result; } }
注:这里需要注意的是,动态代理方法处理器实例一般需要包含被代理类(obj)。invoke函数在动态代理类被调用接口方法时被调用,参数为动态代理类自身,被代理类需要被调用的方法,动态代理类调用接口方法时传入的参数。
2、 创建动态代理类并使用。
package com.coshaho.reflect; import java.lang.reflect.Proxy; public class DynamicProxy { public static void main(String[] args) { Subject subject = new RealSubject(); /** * Proxy.newProxyInstance * 参数1: 动态代理类需要的ClassLoader * 参数2: 动态代理类实现的接口列表 * 参数3: 动态代理类处理器 */ Subject proxySubject = (Subject)Proxy.newProxyInstance( subject.getClass().getClassLoader(), new Class[]{Subject.class}, new ProxyHandler(subject)); proxySubject.doSomething(); } }
源码分析可以参考:http://www.cnblogs.com/flyoung2008/archive/2013/08/11/3251148.html
原文:http://www.cnblogs.com/coshaho/p/5118109.html
内容总结
以上是互联网集市为您收集整理的Java动态代理详解全部内容,希望文章能够帮你解决Java动态代理详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。