首先:定义一个接口// 只能是一个接口


例:

  package DongTai;

  public interface dongtai {
  public void show();
  }

接着:定义一个被代理类,实现这个接口

例:

  package DongTai;

  public class bei implements dongtai{

  @Override
  public void show() {
  // TODO Auto-generated method stub
  System.out.println("代理类");
  }

  }

再:定义一个代理类,实现InvocationHandler接口,重写该接口的invoke()方法

例:

  package DongTai;

  import java.lang.reflect.InvocationHandler;
  import java.lang.reflect.Method;

  import org.omg.CORBA.SystemException;
  import org.omg.CORBA.portable.InputStream;
  import org.omg.CORBA.portable.InvokeHandler;
  import org.omg.CORBA.portable.OutputStream;
  import org.omg.CORBA.portable.ResponseHandler;

  public class bai implements InvocationHandler{
  private Object o;//此处是Object类型的,代表可接受任何类型

  public bai(Object o) {
  super();
  this.o = o;
  }

  @Override
  public Object invoke(Object object, Method method, Object[] arg)throws Throwable {
  System.out.println("调用前");
  method.invoke(o, arg);//method为o的方法,arg为o这个对象的方法的参数
  System.out.println("调用后");
  return null;
  }
  }

最后:

例:

  package DongTai;

  import java.lang.reflect.InvocationHandler;
  import java.lang.reflect.Proxy;

  public class test {
  public static void main(String[] args) {
  bei b=new bei();//创建被代理类对象

  InvocationHandler in=new bai(b);

  //调用处理程序,创建代理类对象,向其构造器中传入被代理类对象,因为实现了InvocationHandler,利用多态转为InvocationHandler型
  Class classType=in.getClass();//创建in的Class类

  dongtai daili=(dongtai) Proxy.newProxyInstance(//实现一个新的代理类,转为接口类
  classType.getClassLoader(), b.getClass().getInterfaces(), in);//参数含义:1.类加载器 2.被代理所实现的接口 3.动态类转为InvocationHandler的实例

  注:上面两行代码,在运行中动态的创建一个代理类,用代理类的类加载器实现被代理类的接口,交给实现InvocationHandler接口的代理类
  daili.show();//调用代理类的方法
  }
  }

java 动态代理总结的更多相关文章

  1. Java 动态代理机制详解

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  2. Java动态代理全面分析

    代理模式 解说:给某一个对象提供一个代理,并由代理对象控制对原对象的引用: 代理模式需要以下几个角色: 1  主题:规定代理类和真实对象共同对外暴露的接口: 2  代理类:专门代理真实对象的类: 3 ...

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

    所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联. java动态代理主要是使用java.lang.reflect包中的两个 ...

  4. Java 动态代理作用是什么?

    Java 动态代理作用是什么?   1 条评论 分享   默认排序按时间排序 19 个回答 133赞同反对,不会显示你的姓名 Intopass 程序员,近期沉迷于动漫ING 133 人赞同 ① 首先你 ...

  5. java动态代理原理

    我们经常会用到Java的动态代理技术, 虽然会使用, 但是自己对其中的原理却不是很了解.比如代理对象是如何产生的, InvocationHandler的invoke方法是如何调用的?今天就来深究下Ja ...

  6. java 动态代理示例,带主要注释

    Java proxy是基于反射,仅仅支持基于接口的动态代理. java 动态代理是一切架构的基础,必须了解. 废话少说,先上代码获得感性认识. 示例代码有主要注释. 接口: public interf ...

  7. java动态代理浅析

    最近在公司看到了mybatis与spring整合中MapperScannerConfigurer的使用,该类通过反向代理自动生成基于接口的动态代理类. 于是想起了java的动态代理,然后就有了这篇文章 ...

  8. Java 动态代理

    被代理的接口特点: 1. 不能有重复的接口,以避免动态代理类代码生成时的编译错误. 2. 这些接口对于类装载器必须可见,否则类装载器将无法链接它们,将会导致类定义失败. 3. 需被代理的所有非 pub ...

  9. [转]java动态代理(JDK和cglib)

    转自:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理 ...

  10. java动态代理模式

    java动态代理机制详解 Spring的核心AOP的原理就是java的动态代理机制. 在java的动态代理机制中,有两个重要的类或接口: 1.InvocationHandler(Interface): ...

随机推荐

  1. Git安装及创建版本库

    一.在Windows上安装Git 1.虽然用于开发的系统最好是用Mac或者Linux,但绝大多数新人都是用Windows进行开发.Windows系统上也有提供了Git(Windows版),下载地址:h ...

  2. EF性能优化

    下面总结了一些在使用EF的过程中应当特别注意的地方,避免大家再走弯路. 1.分清真分页和假分页 大家都知道分页分为真分页和假分页,并且假分页是特别耗费性能的.我们在使用的过程中也是以真分页为主,但是在 ...

  3. arcgis api for javascript 添加图层时设置标注,自定义符号

    <!DOCTYPE html> <html> <head> <meta charset="gb2312"> <meta nam ...

  4. SQLSetStmtAttr

    SQLSetStmtAttr 函数定义: Stmt是用来执行SQL语句的句柄,这个函数是用来设置她的属性的 SQLRETURN SQLSetStmtAttr( SQLHSTMT     , 这是由游标 ...

  5. JavaScript--常用的输出方式

       1.alert("要输出的内容"); 在浏览器中弹出一个对话框,然后把要输出的内容展示出来    2.document.write("要输出的内容");  ...

  6. java 使用jacob把word转pdf

    一.使用前要下载必要包及文件 链接: https://pan.baidu.com/s/1nvutQxb 密码: qgpi 二.引包和dll文件 1.引包:eclipse引包就不用说了,idea引包步骤 ...

  7. 利用python 数据分析入门,详细教程,教小白快速入门

    这是一篇的数据的分析的典型案列,本人也是经历一次从无到有的过程,倍感珍惜,所以将其详细的记录下来,用来帮助后来者快速入门,,希望你能看到最后! 需求:对obo文件进行解析,输出为json字典格式 数据 ...

  8. npm 代理的设置和取消

    管理员权限下的控制台输入: 设置代理 npm config set proxy=http://127.0.0.1:8080 npm config set registry=http://registr ...

  9. Nginx配置基础-location

    location表达式类型 ~ 表示执行一个正则匹配,区分大小写~* 表示执行一个正则匹配,不区分大小写^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location.= 进行普通 ...

  10. 设计模式之Interpreter(解释器)(转)

    Interpreter定义: 定义语言的文法 ,并且建立一个解释器来解释该语言中的句子. Interpreter似乎使用面不是很广,它描述了一个语言解释器是如何构成的,在实际应用中,我们可能很少去构造 ...