1、java自带的proxy类可以创建动态类,如果一个类实现了一个接口那么久可以为这个类创建代理。

2、代理:就是当用户要调用一个类的方法时,用户可以通过调用代理,代理通过接口调用原来的类的方法,代理在把方法给用户前可以添加一些方法,如错误日志,用户类的方法运行的时间来监听类方法的性能。当代理完成时候就是当代理调用方法时候,就会启动InvocationHandler里的invoke方法。用户并不知道用户要为哪个类带理,因此在框架中用配置文件来获取代理的类,用户需要用框架时候就修改配置文件即可。

public class Proxydemo {public static void main(String[] args) throws Exception {//这是分2部,来实现collection的代理的,下面是1步实现代理,并且是任何类
//      Class classproxy=Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);
//       Constructor[]constructors=classproxy.getConstructors();
//       Constructor constructor=classproxy.getConstructor(java.lang.reflect.InvocationHandler.class);
//       for(Constructor c:constructors)
//       {
//           System.out.println(c.toString());
//       }final ArrayList a=new ArrayList<>();
//      Collection  c=(Collection) constructors[0].newInstance(new InvocationHandler(){
//
//          @Override
//          public Object invoke(Object proxy, Method method, Object[] args)
//                  throws Throwable {
//              ArrayList a=new ArrayList<>();
//              System.out.println(System.currentTimeMillis());
//              Object ob=method.invoke(a ,args);
//              System.out.println("a的size:"+a.size());
//              System.out.println(System.currentTimeMillis());
//              return ob;
//          }
//
//       });c.add("dada"); c.add("dada");System.out.println( c.size());
//       //下面是实现代理的原理,pr是给代理的接口,advice是代理要监控方法的接口final Pro pr=new ProtexTest();final Advice advice=new MyAdvice();Pro classproxy=(Pro)Proxy.newProxyInstance(pr.getClass().getClassLoader(), new Class[]{Pro.class}, new  InvocationHandler(){@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {advice.beforemethod();//这是方法前调用的方法Object o=method.invoke(pr, args);advice.aftermethod();//这是方法后调用的方法return o;}});
//当调用sayhello时候,系统就去找代理调用InvocationHandler里的invoke方法。classproxy.sayhello();
/*      所以打印结果为:1441522392491hello1441522392493
*/      //调用代理函数Pro o=(Pro) daili(pr,advice);o.sayhello();}/******************下面可以吧上面的方法抽出为一个代理方法,为任何实现接口的类代理*****//** target 为目标类实现的接口* advice为代理要监控方法的接口*/public static Object daili(final Object target,final Advice advice){Object classproxy=(Object)Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), new  InvocationHandler(){@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {advice.beforemethod();//这是方法前调用的方法Object o=method.invoke(target, args);advice.aftermethod();//这是方法后调用的方法return o;//返回方法执行后返回的值}});return classproxy;}
}

  

转载于:https://www.cnblogs.com/bokeofzp/p/4786308.html

java代理的学习,通过类实现接口来实现代理。proxy来创建动态类,和InvocationHandler接口的实现,和工作原理。...相关推荐

  1. python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))...

    昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据.StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对象 ...

  2. 【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )

    文章目录 一.Expando 动态类简介 二.动态类创建 三.为动态类增加字段和方法 四.完整代码示例 一.Expando 动态类简介 Groovy 运行时 , 可以动态地创建一个类 , 该类称为 & ...

  3. Java张孝祥视频 学习笔记 代理

    /***************************************************************************************/ 此博客主要是在观看张 ...

  4. 【学习笔记】结合代码理解设计模式 —— 代理模式(静态代理、动态代理、延伸)

    文章目录 什么是代理模式 一. 代理模式简介 二. 静态代理模式 三. 动态代理模式 万能模版 前言:笔记基于狂神设计模式视频.<大话设计模式>观后而写 (最近一直在更新之前的刷题博客,今 ...

  5. JAVA【创建笔记本电脑类】笔记

    创建笔记本电脑类(继承一个类,实现多个接口) 创建NetCard接口和USB接口,创建Computer抽象类,然后继承Computer类,实现NetCard接口和USB接口,创建笔记本电脑类Lapto ...

  6. java 网络编程学习笔记

    java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...

  7. java struct工作原理_Struts2的工作原理(图解)详解

    Struts2的工作原理 上图来源于Struts2官方站点,是Struts 2 的整体结构. 一个请求在Struts2框架中的处理大概分为以下几个步骤(可查看源码:https://github.com ...

  8. 类脑计算机有什么用处,亿级神经元类脑计算机发布的意义,亿级神经元类脑是什么概念...

    亿级神经元类脑计算机发布,其意味着什么? 9月1日,浙江大学和之江实验室在杭州发布了一台包含1.2亿个脉冲神经元和近1000亿个突触的类脑计算机.这台计算机使用浙江大学开发的792 达尔文第二代类脑芯 ...

  9. Java EE 课程作业(Fifth)-- XML:定义 用途 工作原理及未来xml

    一.XML定义: XML即可扩展标记语言(eXtensible Markup Language).标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等.如何定义这些标 ...

最新文章

  1. 练习10-1 使用递归函数计算1到n之和 (10 分)
  2. React+Redux开发实录(一)搭建工程脚手架
  3. Python创建二维数组(关于list的一个小坑)
  4. python常用的工具函数
  5. 各种PID算法的整理和总结
  6. iOS 证书错误 Certificates下面的 App Store and Ad Hoc是灰的?? 点不了
  7. Android使用jxl快速生成Excel表
  8. zc702运行linux,笔记:ZC702之linux运行
  9. canvas 实现雷达图
  10. linux6磁盘绑定,关于Linux 6使用udev绑定共享磁盘的测试
  11. 计算机图形学 之 中点画线算法
  12. 公司员工考勤系统Java代码
  13. 写论文、搞科研、读大学必备的28款软件。
  14. 基于Springboot实现汽车4S店销售管理系统
  15. 线性方程组解的结构与判别
  16. android10怎么截屏,安卓手机怎么截图?安卓手机截图方法大全
  17. 关闭数据库时SHUTDOWN: waiting for active calls to complete.处理
  18. MarkdownPad2安装汉化与注册码
  19. Spring基础-AOP-切入点详解
  20. 三菱fx3u编码器同步程序,伺服同步,一个编码器控制两个伺服同步运转

热门文章

  1. 关于VC++6.0中getline函数的一个bug
  2. ASP.NET MVC3 中的AJAX
  3. CustomValidator
  4. 模切ERP和免费OA系统是互相结合提高效率
  5. 安卓开发 新浪微博share接口实现发带本地图片的微博
  6. QTP提供的编程接口实现对QTP操作
  7. 《.NET最佳实践》与Ext JS/Touch的团队开发
  8. 【原创】什么是 wire protocol
  9. 数据库中使用自增量字段与Guid字段作主键的性能对比(补充篇)-----转
  10. 计算机操作系统指导书,《计算机操作系统》实验指导书-2015