Proxy设计模式

来源:互联网 发布:刀剑物语宠物进阶数据 编辑:程序博客网 时间:2024/06/04 19:59

作为AOP的实现,代理类实现的功能在被代理类的原业务方法上增加附加的业务功能,被代理的方法应该在此类实现的接口中声明。

实现过程
作为包含附加功能(通过方法实现)的类MyInvocationHandler须实现 InvocationHandler 接口,此类必须传入被代理类的对象 比如说

作为此类的成员变量(private Object target)。然后重写invoke() 方法,第一个参数 Object proxy 就是代理类的对象, 第二个参

数 Method method 就是执行的被代理对象的方法, 第三个参数Object[] args就是method的参数。 
将附加业务方法写入invoke()方法中,然后在调用被代理对象的业务方法 method.invoke(target, args),其中顺序可以根据业务逻辑

自己设定。

然后在客户端中产生被代理对象,将被代理对象注入MyInvocationHandler对象中
然后根据被代理对象产生一个代理对象,通过 Proxy 类的静态方法 Proxy.newProxyInstance() 来实现,代理对象和被代理对象需要

用同一个ClassLoader,所以第一个参数为被代理对象(或者其实现的接口).getClass().getClassLoader(), 第二个参数指代理对象需

实现的接口,就是指定代理对象可以代理的方法(可以多个),第三个参数参数即为刚生成的MyInvocationHandler的对象。此方法返回

代理的对象,此对象会实现了此方法中第二个参数所描述的接口,所以可以通过接口获取。

通过此代理对象方法(就是接口中的方法)的调用,来触发MyInvoationHandler类对象中的invoke()方法来实现对被代理对象方法的代

理,外界以为此代理对象就是原被代理对象。