首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

对署理模式与Java动态代理类的理解(三转)

2012-12-19 
对代理模式与Java动态代理类的理解(三转)该代理类的内部属性为Object类,实际使用时通过该类的构造函数Dyna

对代理模式与Java动态代理类的理解(三转)


              该代理类的内部属性为Object类,实际使用时通过该类的构造函数DynamicSubject(Object obj)对其赋值;此外,在该类还实现了invoke方法,该方法中的
              method.invoke(sub,args);
              其实就是调用被代理对象的将要被执行的方法,方法参数sub是实际的被代理对象,args为执行被代理对象相应操作所需的参数。通过动态代理类,我们可以在调用之前或之后执行一些相关操作。
                  客户端:import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class Client{static public void main(String[] args) throws Throwable{RealSubject rs = new RealSubject(); //在这里指定被代理类InvocationHandler ds = new DynamicSubject(rs); //初始化代理类Class cls = rs.getClass();//以下是分解步骤/*Class c = Proxy.getProxyClass(cls.getClassLoader(),cls.getInterfaces()) ;Constructor ct=c.getConstructor(new Class[]{InvocationHandler.class});Subject subject =(Subject) ct.newInstance(new Object[]{ds});*///以下是一次性生成Subject subject = (Subject) Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),ds );subject.request();}
                  通过这种方式,被代理的对象(RealSubject)可以在运行时动态改变,需要控制的接口(Subject接口)可以在运行时改变,控制的方式(DynamicSubject类)也可以动态改变,从而实现了非常灵活的动态代理关系。
                  以上是转载别人的,一个转载人的理解:
                  在使用动态代理的时候通过Proxy动态的生成一个代理对象,该代理对象与被代理的对象享有相同的函数接口。使用这种动态代理可以自动的截获被代理类的各种方法,并通过代理类在动作执行的前后添加不同的预处理动作。
                  生成代理对象的方法通过
                  newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)
                  参数分别说明,1.被代理对象的ClassLoder,2.被代理对象的接口组,3.实现代理invoke接口的代理对象,在loader的任何操作被执行的时候调用h的具体方法进行改造。注意newProxyInstance是一个object该对象与loader的实际类型相同。 自己的理解:代理结构interface---->instance??????????????? handler(instance)处理程序???????????????????????? |????????????????????????????????? |??????????????????????? -------------------------------???????????????????????????????????????? |??????????????????????????代理类(interface类型)这么看就是中介 代理的作用。动态是因为调用所有的instance的方法,都只用handler的invoke处理就可以。不用像代理模式中写出相应的方法。

热点排行