java代理原理,java实现代理

  java代理原理,java实现代理

  00-1010 1、动态代理模式2、JDK动态代理3、JDK动态代理代码演示

  00-1010动态代理特征:

  代理对象时,不需要实现接口代理对象的生成。就是利用JDK的API在内存中动态构建代理对象(我们需要指定创建代理对象/目标对象的接口类型)。动态代理的别名:JDK代理和接口代理。

  00-1010类图:

  Java动态代理类位于java.lang.reflect包下。

  通常,涉及以下两个类别:

  1.接口调用处理程序:在这个接口中只定义了一个方法,Public Object Invoke (object obj,method method,object [] args)。在实际使用中,第一个参数obj一般指的是代理类,方法是代理方法,args是这个方法的参数数组。这个抽象方法是在代理类中动态实现的。

  2.这个类是一个动态代理类。

  静态对象NewProxyInstance(Class Loader Loader,Class [] Interfaces,Invocation Handler H) 3360返回代理类的一个实例,返回的代理类可以作为代理类使用(可以使用接口中声明的代理类的方法)。

  生成的动态实现步骤:

  创建一个实现接口InvocationHandler的类。它必须实现invoke方法来创建代理类和接口调用代理的静态方法,并创建一个代理类:newproxyinstance (class loader,class []通过代理调用方法。

  00-1010例如,现在有一种驾驶汽车的方法:

  公共接口可移动{ void move();}现在有车了:

  //实现可移动接口,随机暂停一段时间导入Java . util . random;公共类Car实现可移动{ @ Override public void move(){ try { thread . sleep(new Random()。nextInt(1000));System.out.println(车在动);} catch(interrupted exception e){ e . printstacktrace();}}}时间代理类:

  导入Java . lang . reflect . invocation handler;导入Java . lang . reflect . method;公共类TimeHandler实现invocation handler { public time handler(Object target){ super();this.target=target}私有对象目标;/* * * * @ param Proxy : Proxy Object * @ param method:Proxy Object的方法* @ param args:Method的参数* @ Return * @ Throwable *返回值:object method的返回值*/@ Override public Object invoke(Object Proxy,Method,Object[]args)Throwable { long start time=system . current time millis();System.out.println(汽车开始运动);method.invoke(目标);long end time=system . current time millis();System.out.println(汽车行驶时间为:(endTime-startTime)毫秒);返回null}}测试类别:

  导入Java . lang . reflect . invocation handler;导入Java . lang . reflect . proxy;public class Test { public static void main(String[]args){ Car Car=new Car();invocation handler h=new time handler(car);班级?cls=car . getclass();/* * *参数/** * newProxyInstanced是:类加载器、实现的接口和实现的处理器*/mobile m=(mobile)proxy。new proxy instance(cls . get class loader()、cls.getinterfaces()、h);m . move();}}这个输出结果是:

  当汽车开始运行时,汽车停止运行,运行时间为:137毫秒。//后面的时间是随机生成的,每次都不一样。

  注意:

  JDK代理只能代理实现接口的类,没有实现接口的类不能代理。

  以上是JDK动态代理,当然还有cglib动态代理:

  Cglib实现类的代理。cglib的原理是生成指定目标类的子类,并覆盖方法增强。但是因为它采用继承,所以无法代理final修改的类,因为小莹学长本人也没有完全掌握这一块,这里就不解释了。可以参考其他博主的技术文章。

  三月完美落幕!最后,小英学长非常感谢你的支持和陪伴。你的支持是我最大的动力。继续写自己喜欢的文章!

  关于Java用简单的术语解释代理模式的这篇文章到此结束。有关Java代理模式的更多信息,请搜索以前关于流行它的文章或继续浏览下面的相关文章。我希望你能在未来更多地支持它!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: