java中的代理分为哪两种,Java 代理类

  java中的代理分为哪两种,Java 代理类

  说起代理,大家肯定都接触过。毕竟有些事务不想亲自处理的时候,会选择委托别人解决。然后java里有这样一种机制,叫做代理模式。主要分为两类:静态代理和动态代理。一个是运行前存在的,一个是运行后创建的。让我们解释一下java中的两种代理模式。

  1.静态代理

  由程序员创建或由第三方工具生成,然后编译;在程序运行之前。代理类的类文件已经存在。静态代理通常只代理一个类,需要事先知道代理是什么。

  publicsclassblogstaticproxyimplementsiblogservice {

  privateIBlogServiceblogService;

  public blogstaticproxy(IBlogServiceblogService){

  this . blog service=blog service;

  }

  @覆盖

  publicvidwriteblog(){

  System.out.println(开始写入.);

  blog service . write blog();

  System.out.println(结束写入.);

  }

  }2.动态代理

  动态代理的代理类在程序运行前是不存在的,也就是说程序运行时代理类创建的代理模式就变成了动态代理。在这种情况下,代理类不是在Java代码中定义的,而是在程序运行时根据我们在Java代码中的“指令”动态生成的。

  publicclassMainClass{

  publicstaticvoidmain(String[]args){

  nbsp;//1、创建一个真实角色

  Singertarget=newSinger();

  //2、调用Proxy.newProxyInstance方法,并构造一个InvocationHandler对象,

  //3、在对象内部重写invoke方法,同时调用method.invoke(target,args);

  //4、并在该方法的上下添加自己的代码逻辑

  //其中:target.getClass().getClassLoader():获取类加载器,用来生成代理对象;

  //target.getClass().getInterfaces()获取接口元信息;

  ISingeriSinger=(ISinger)Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),newInvocationHandler(){

  @Override

  publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{

  System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“前”编写自己的业务逻辑

  ObjectreturnValue=method.invoke(target,args);//此处通过反射调用真实对象对应的方法;

  System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“后”编写自己的业务逻辑

  returnreturnValue;

  }

  });

  iSinger.sing();

  }

  }

  //测试结果

  "C:ProgramFilesJavajdk1.8.0_211binjava.exe""-javaagent:C:Program.......

  动态代理---向观众问好

  singasong

  动态代理---向观众问好

  

  Processfinishedwithexitcode0

以上就是java代理模式的分类,学习完本篇的内容后,想必大家已经能对静态代理和动态代理有所区分。在实际使用时,可以根据需求自行选择。

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

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