Java代理与动态代理
来源:互联网 发布:小岛微风淘宝店 编辑:程序博客网 时间:2024/04/29 06:41
一、简单代理
代理类和被代理类实现相同的接口,具体代码如下:
因为consumer()接收的是Inerface,所以无法知道正常获得的是RealObject还是SimpleProxy,因为它们都实现了Interface。
SimpleProxy内部会调用RealObject,所以它会执行和RealObject上相同的方法。
接口类
package Resource.Proxy;public interface Interface {void doSomething();void somethingElse(String arg);}
被代理类
package Resource.Proxy;public class RealObject implements Interface {public void doSomething() {System.out.println();}public void somethingElse(String arg) {System.out.println("somethingElse"+arg);}}
package Resource.Proxy;public class SimpleProxy implements Interface {private Interface proxied;public SimpleProxy(Interface proxied) {this.proxied = proxied;}public void doSomething() {System.out.println("SimpleProxy doSomething");proxied.doSomething();}public void somethingElse(String arg) {System.out.println("SimpleProxy somethingElse" + arg);proxied.somethingElse(arg);}}
测试类
package Resource.Proxy;public class SimpleProxyDemo {public static void main(String[] args) {consumer(new RealObject());consumer(new SimpleProxy(new RealObject()));}public static void consumer(Interface iface) {iface.doSomething();iface.somethingElse("hello world");}}测试结果
somethingElsehello world
SimpleProxy doSomething
SimpleProxy somethingElsehello world
somethingElsehello world
二、动态代理
代码如下:
package Resource.Proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public 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);}static class SimpleDynamicProxy{public static void consumer(Interface iface){iface.doSomething();iface.somethingElse(" bonabo");}public static void main(String[] args){RealObject real=new RealObject();Interface proxy=(Interface)Proxy.newProxyInstance(Interface.class.getClassLoader(), new Class[]{Interface.class}, new DynamicProxyHandler(real));consumer(proxy);}}}
0 0
- Java 代理与动态代理
- Java代理与动态代理
- Java 代理与动态代理
- 代理模式与Java动态代理类
- java中的静态代理与动态代理
- 代理模式与Java动态代理类
- Java静态代理与动态代理
- java中的静态代理与动态代理
- Java静态代理与动态代理
- java中的静态代理与动态代理
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- java静态代理与动态代理
- JAVA代理模式与动态代理模式
- Java 基础加强 - 代理与动态代理
- java的代理与动态代理
- Java动态代理与静态代理
- JAVA代理模式与动态代理模式
- ios 设置状态栏背景颜色
- 解决Destroying ProtocolHandler ["ajp-apr-8009"]
- postgres数据库简单的使用
- 查询重复数据的sql语句
- hadoop 基本命令 和常见错误(笔记)
- Java代理与动态代理
- ubuntu下usb无法连接
- 剑指offer之用两个栈实现队列
- Android UI优化工具的使用 HierchyViewer
- 通过cookies实现国际化
- DFA 算法实现关键词匹配
- hsacm-1629 拦截导弹
- iOS隐藏状态栏
- 第三章:nagios邮件提醒