JDK动态代理

1.InvocationHandler接口

  里面有三个类:InvocationHandler,Method,proxy

  InvocationHandler接口(调用处理器),就一个方法,invoke(),表示代理对象要执行的功能代码

  代理类完成的功能:

    1.调用目标方法,执行目标方法的功能

    2.功能增强,在目标方法调用时,增加功能

 

方法原型:

public Object invoke(Object proxy, Method method, Object[] args)

  参数:

  Object proxy:jdk创建的代理对象,无需赋值

  Method method:目标类中的方法,jdk提供的method对象

  Object[] args:目标类中方法的参数,jdk提供

InvocationHandler接口:表示你的代理要干什么

  用法:

  1.创建类实现接口InvocationHandler

  2.重写invoke()方法,把原来静态代理中代理类需要完成的功能,写在这里;

 

2.Method类:表示方法的,目标类中的方法

作用:

  通过Method可以执行某个目标类的方法,Method.invoke();

  method.invoke(目标对象,方法的参数)

  method.invoke(demo,"李四");

  

  method.invoke()就是用来执行目标方法的,等同于静态代理中的

  //向厂家发送订单,告诉厂家,我买了U盘,厂家发货

  float price = factory.sell(amount);

 

3.Proxy类:核心对象,创建代理对象。

  方法:静态方法,newProxyInstance(),作用是创建代理对象,等同于在静态代理中创建TaoBao tao = new TaoBao();

  

  方法原型:

  

public static Object newProxyInstance(ClassLoader loader,
                                          Class<?>[] interfaces,
                                          InvocationHandler h)

  参数:

  1.ClassLoader loader:类加载器,负责向内存中加载对象

   例子:类a,a.getclass().getClassLoader(),目标对象的类加载器

  2.Class<?>[] interfaces:接口,目标对象实现的接口,也是反射获取的

  3.InvocationHandler h:自己写的,代理类要完成的功能

  返回值:就是代理对象

 

4.实现动态代理的步骤

  1.创建接口,定义目标类要完成的功能

  2.创建目标类实现接口

  3.创建InvocationHandler接口的实现类,在invoke方法中完成代理类的功能

    1.调用目标方法

    2.功能增强

  4.使用Proxy类的静态方法,创建代理对象,并把返回值转为接口类型

 

posted on 2021-03-15 20:44  暮雨轻风  阅读(42)  评论(0编辑  收藏  举报