java代理 InvocationHandler接口实现
2015-11-04 09:00
453 查看
1 Person接口,人,在唱歌。
2 Person的实现类
3 需要调用的方法
4 实现InvocationHandler
5 写一个获取代理对象的工厂
6 测试
package com.myproxy; public interface Person { public void song(); }
2 Person的实现类
package com.myproxy; public class PersonImpl implements Person { @Override public void song() { System.out.println("person song!"); } }
3 需要调用的方法
package com.myproxy; public class Util { public void dog() { System.out.println("Dog song!"); } public void cat() { System.out.println("Cat song!"); } }
4 实现InvocationHandler
package com.myproxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class MyInvocationHandler implements InvocationHandler { private Object target; public void setTarget(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Util util = new Util(); util.cat(); Object invoke = method.invoke(target, args); util.dog(); return invoke; } }
5 写一个获取代理对象的工厂
package com.myproxy; import java.lang.reflect.Proxy; public class ProxyFactory { public Object getProxy(Object target) { MyInvocationHandler h = new MyInvocationHandler(); h.setTarget(target); return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), h); } }
6 测试
package com.myproxy; public class TestProxy { public static void main(String[] args) { Person target = new PersonImpl(); ProxyFactory factory = new ProxyFactory(); Person person = (Person) factory.getProxy(target); person.song(); } }
相关文章推荐
- Java中的静态方法调用静态成员变量
- 利用javaMail发送邮件
- 从JVM分析Java的类的加载和卸载机制
- java发送电子邮件email
- java学习笔记(三)—数组
- 离线使用tycho对eclipse RCP打包导出
- eclipse RCP界面从3.x切换到e4
- eclipse进度条从后台还原到前台
- 【java解惑】本地变量声明只能放在语句块中
- 【java解惑】类和实例的初始化循环问题
- 【java解惑】重载构造函数
- 【java解惑】递归异常与有限循环
- 【java解惑】java构造器的那些事儿
- 【java解惑】java编译器对空final赋值的妥协
- 【java解惑】int转化为float精度问题
- 【java解惑】&和&&、|和||使用
- 【java解惑】输入输出流使用后及时关闭问题
- 【java解惑】try-finally语句执行问题
- 【java解惑】关于异常捕获的三条要求
- 【java解惑】java中那些反常识的小知识(续)