• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > JAVA动态代理模式(从现实生活角度理解代码原理)

JAVA动态代理模式(从现实生活角度理解代码原理)

作者:潘侯爷 字体:[增加 减小] 来源:互联网 时间:2017-05-28

潘侯爷 通过本文主要向大家介绍了java 角度看,java 角度转弧度,java 角度,java动态数组,java动态代理等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联。

java动态代理主要是使用java.lang.reflect包中的两个类。

InvocationHandler类

public Object invoke(Object obj,Method method,Object[] obs)

其中第一个参数 obj 指的是代理类,method是被代理的方法,obs是指被代理的方法的参数组。此方法由代理类来实现。

Proxy类

protectedProxy(InvocationHandler h);

staticClass getProxyClass(ClassLoader loader,Class[] interfaces);

staticObject newProxyInstance(ClassLoader loader,Class[]interfaces,InvocationHandlerh);
</div>

动态代理其实是在运行时生成class,所以,我们必须提供一组interface,然后告诉他class已经实现了这些interface,而且在生成Proxy的时候,必须给他提供一个handler,让他来接管实际的工作。

同样的在开始代码实现之前,我们还是要讲一下关于链家的故事,之前静态代理模式中提到链家(接口)有卖二手房的业务,公司有一大批售房精英(静态代理),但现在互联网金融这块发展势头迅猛,链家也想插一脚进去,但苦于没有相关人才(代理)储备,这时公司便有了从相关的人才市场(动态代理“工厂”)寻找专业人才实现此类业务的想法,人才市场,顾名思义,就是根据企业(接口)的某种需求(被代理的方法)寻找有相关技能的人才。下面开始动态代理的实现代码:

第一步:LianJia提供房屋买卖以及互联网贷款渠道方法(接口)

 interface LianJia {
   public void sellHouse();
   public void loan();
 }
</div>

第二步:我们的房主不仅要卖房也要贷款做其他事情(市场需求)得知链家有这个业务所以他又找到了链家(被代理对象)

public class HouseMaster implements LianJia {
  @Override
  public void sellHouse() {
    System.out.println("我有房子要卖");
  }
  @Override
  public void loan() {
    System.out.println("我要贷款做生意");
  }
}
</div>

第三步:这里是浩瀚的人才市场,你想要的这里都有(生成动态代理的类)

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class CreatProxy implements InvocationHandler{
  //声明被代理对象(之所以用Object是因为他在Java中是所有类包含自定义类的超类)
  private Object target;
  //创建代理对象(根据被代理对象需求)
  public Object bind(Object target){
    this.target = target;
    //使用Proxy类创建一个动态代理对象
    Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    return proxy;
  }
  //具体执行业务的方法
    /**
     * proxy: 代理类对象
     * method:被代理对象的方法
     * args:被代理对象方法的参数
     */
  public Object invoke(Object proxy, Method method, Object[] args)
      throws Throwable {
    //调用业务方法
    method.invoke(target);
    return null;
  }
}
</div>

第四步:实现测试类

public class Test {
  public static void main(String[] args) {
    HouseMaster hm = new HouseMaster();
    CreatProxy cp = new CreatProxy();
    LianJia lj = (LianJia) cp.bind(hm);
    lj.sellHouse();
    lj.loan();
  }
}
</div>

我们也发现从静态代理到动态代理整个过程中发现,被代理对象(市场需求)会随时变化,企业(接口)也必须启用动态代理模式才可应对市场变化(个人认为富士康就属于一个大的电子类动态代理工厂,而苹果谷歌等企业则为市场需求的缔造者与规则(接口)的)。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JAVA动态代理模式(从现实生活角度理解代码原理)

相关文章

  • 2017-05-28java 算法之归并排序详解及实现代码
  • 2017-05-28spring boot(四)之thymeleaf使用详解
  • 2017-05-28java实现简单的webservice方式
  • 2017-05-28Spring Boot如何使用Spring Security进行安全控制
  • 2017-05-28Java编程实现从给定范围内随机N个不重复数生成随机数的方法小结
  • 2017-05-28Spring Boot实现动态更新任务的方法
  • 2017-05-28MyBatis关于二级缓存问题
  • 2017-05-28Java中Properties类的操作实例详解
  • 2017-05-28listview点击无效的处理方法(推荐)
  • 2017-05-28SpringBoot用JdbcTemplates访问Mysql实例代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java 中Timer和TimerTask 定时器和定时任务使用的例子
    • 超实用的Java快捷键(总结)
    • Java数据结构与算法之栈(动力节点Java学院整理)
    • java 中 阻塞队列BlockingQueue详解及实例
    • java 中HashMap实现原理深入理解
    • java数据结构与算法之简单选择排序详解
    • Kotlin开发Android应用实例详解
    • Java List简介_动力节点Java学院整理
    • Struts2之Action接收请求参数和拦截器详解
    • Mybatis中 SQL语句复用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有