转载请注明出处:http://www.cnblogs.com/zhangcaiwang/p/6247755.html

代理是一种类,编译器编译完成之后是以$Proxy开头。

初始化代理的时候需要类加载器、接口数组、调用处理器。功能分别是:

类加载器:作为java安全模型的一部分;

接口数组:规定该代理类应该具有哪些方法;

调用处理器:在代理调用所实现的接口中的方法时,在对应接口中的方法中用调用处理器对象通过调用invoke方法真正实现接口方法功能。

代理类的作用是,如果在编译的时候不知道要操作的对象实现的哪些接口,但以后还需要调用这个对象实现的接口中的方法,则可以把这个对象用代理对象代理,而在构造代理对象的时候,用一组包括该接口的接口数组来初始化代理。那么此时代理对象中就有了这些接口中的方法和对应的实现。但是呢,这些代理方法中的实现并不是实现了接口规定的功能,而是调用了调用处理器对象的invoke方法。这个调用处理器对象就是在创建代理对象时初始化用到的实现了InvocationHandler接口的对象。

在代理类调用接口中的方法时,在方法内部调用调用处理器的invoke方法,并向该方法中传入所调用的方法名(Method类对象)、参数,然后在该方法中通过在反射中调用任意方法用到的invoke方法实现操作对象真正拥有的方法。而代理类实现的其它接口的方法作为一种可能性的保险措施,并没有且不会被用到。

一个代理类只有一个实例域——调用处理器。为了履行代理对象的职责,所需要的任何附加数据必须存储在调用处理器中。

在代理类中实现的方法有,接口中的所有方法,Object类中的toString、hashCode、equals方法。代理类一定是public和final,也就是说代理类不属于某个特定的包。p251

java代理理解的更多相关文章

  1. java代理的深入浅出(一)-Proxy

    java代理的深入浅出(一)-Proxy 1.什么是代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事 ...

  2. JAVA代理机制

    JAVA代理相关主要知识如下: (1)利用代理可以在运行时创建一个实现了一组给定接口的新类.         这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. (2)假设有一个表示接口的C ...

  3. java代理通俗简单解析

    1         代理 1.1            代理的概念和作用 代理的概念很好理解,就像黄牛代替票务公司给你提供票,经纪人代理艺人和别人谈合作.Java的代理是指实现类作为代理类的属性对象, ...

  4. Java 代理模式

    熟悉设计模式的人对于代理模式可能都不陌生.那什么事代理呢,例如我们要买一件国外的商品,但是自己买不到只能去找代购,这个代购就是我们的代理.我们来了解下java中的代理 静态代理 我们来举一个开车的例子 ...

  5. java代理,手把手交你写java代理

    一:常用的java代理模式 一般经常做java开发的知道java的代理模式一共有三种,第一种也就是静态代理,这种用法比较简单,没有什么魔法棒,比较好理解,另外两种分别是JDK代理和cglib代理,他们 ...

  6. [java] 深入理解内部类: inner-classes

    [java] 深入理解内部类: inner-classes // */ // ]]>   [java] 深入理解内部类: inner-classes Table of Contents 1 简介 ...

  7. Java代理模式

    java代理模式及动态代理类 1.      代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目 ...

  8. java 代理的三种实现方式

    Java 代理模式有如下几种实现方式: 1.静态代理. 2.JDK动态代理. 3.CGLIB动态代理. 示例,有一个打招呼的接口.分别有两个实现,说hello,和握手.代码如下. 接口: public ...

  9. Java初始化理解与总结 转载

    Java的初始化可以分为两个部分: (a)类的初始化 (b)对象的创建 一.类的初始化 1.1 概念介绍: 一个类(class)要被使用必须经过装载,连接,初始化这样的过程. 在装载阶段,类装载器会把 ...

随机推荐

  1. c++ 命名空间 以及 作用域 函数参数 面向对象实验报告

    面向对象的分析与设计  实验报告一 一.变量的储存类别 auto static register extern auto变量   函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存 ...

  2. 百度云bcc建站

    一.购买百度云服务 1.百度云bcc购买网页http://bce.baidu.com/product/bcc.html 2.买完后管理:http://console.bce.baidu.com/bcc ...

  3. 全网首创ISE入门级教程

    转眼间我已经大三了,现在成为了实验室的负责人,对于下一届学生的纳新重任就交到了我的手上,想采取不同的方法暑假尽可能对他们进行一些培训,所以制作了此教程,说实话,在网上还没有找到关于ISE的入门级使用教 ...

  4. 关于springmvc配置validator的注意事项

    <mvc:annotation-driven validator="validator" /> 在使用springmvc整合hibernate-validator做表单 ...

  5. 20170721_python字符串操作_《python语言及其应用》

    str = 'abcde...wxyz' [num]提取指定字符 str[0] == 'a' str[1] == 'b' str[-1] == 'z' [start:end:step]分片/切片,一定 ...

  6. 20170711_map/reduce

    js: map: var arr = [1,2,3,4,5]; var res = arr.map(function(x){ return x * x; }); //res 现在 = [1,4,9,1 ...

  7. C指针1

    //定义:指针是一个特殊的数据类型,指针指向内存中的地址,因此,指针变量存储的是内存中的一个地址 //例子,%p表示打印一个地址,打印p表示打印p指向的地址 //输出结果为0x7fff5fbff7dc ...

  8. MyBatis+PageHelper实现分页

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7256105.html 前面讲到Spring+SpringMVC+MyBatis深入学习及搭建(十七)--Sp ...

  9. [HAOI 2005][BZOJ 1054] 移动玩具

    先贴一波题面 1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2288  Solved: 1270 Descr ...

  10. Ubuntu超好用软件:markdown编辑器

    Ubuntu上好用的markdown编辑器:typora 安装教程: sudo add-apt-repository ppa:hzwhuang/ss-qt5 sudo apt-get update s ...