动态代理
来源:互联网 发布:外设与cpu数据交换方式 编辑:程序博客网 时间:2024/06/02 05:37
代理也是基本的设计模式之一,它是你为了提供额外不同的操作,而插入的用来代替“实际”对象的对象,这些操作通常涉及与“实际”对象的通信,因此代理通常充当着中间人的角色,在动态代理上所做的所有调用都会被重定向到单一的调用处理器上。
代码例子:
interface Interface { void doSomething(); void somethingElse(String arg); } //被代理的对象 class RealObject implements Interface { public void doSomething() { System.out.println("doSomething"); } public void somethingElse(String arg) { System.out.println("somethingElse " + arg); } } //代理处理器 class DynamicProxyHandler implements InvocationHandler { private Object proxied; public DynamicProxyHandler(Object proxied) { this.proxied = proxied; } //所有代理调用方法将重定向到这个处理方法 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("**** proxy: " + proxy.getClass() + ", method: " + method + ", args: " + args); if(args != null) for(Object arg : args) System.out.println(" " + arg); return method.invoke(proxied, args); } } class SimpleDynamicProxy { public static void consumer(Interface iface) { iface.doSomething(); iface.somethingElse("bonobo"); } public static void main(String[] args) { RealObject real = new RealObject(); consumer(real); Interface proxy = (Interface)Proxy.newProxyInstance( Interface.class.getClassLoader(), new Class[]{ Interface.class }, new DynamicProxyHandler(real)); consumer(proxy); } }
运行输出结果:
doSomething
somethingElse bonobo
** proxy: class beyondboy.$Proxy0, method: public abstract void beyondboy.Interface.doSomething(), args: null
doSomething
** proxy: class beyondboy.$Proxy0, method: public abstract void beyondboy.Interface.somethingElse(java.lang.String), args: [Ljava.lang.Object;@18170f98
bonobo
somethingElse bonobo
0 0
- 代理-->静态代理&动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 指针
- javascript事件监听,事件冒泡/捕获总结
- 机器学习实战——第一章:机器学习基础
- java+jsp+servlet实现分页
- 第10周-不借助中间变量交换求三个数的最值
- 动态代理
- springmvc的@RequestMapping、@PathVariable、@RequestParam
- 获取页面图片路径
- 语法高亮控件
- PHP Warning: PHP Startup
- 八皇后问题(回溯算法)
- Learn to Say, “Hello, World”
- SSH免密码登录远程主机
- 机器学习实战——第二章:K-近邻算法