美文网首页
认识动态代理随笔

认识动态代理随笔

作者: wbobo | 来源:发表于2018-11-15 22:15 被阅读0次

1. 什么是动态代理

静态代理是一般是由委托类和代理类实现同一个接口,代理类使用组合的方式来对委托类进行扩展代理过滤等

例如:

interface A{

void say();

}

//委托类

class B implements A{

void say(){

System.out.println("good bye");

}

}

//代理类

class BProxy implements A{

A b;

public BProxy(A b){

this.b = b;

}

void say(){

System.out.println("扩展一下");

b.say();

}

}

静态代理是运行前代理类就已经定义好的了,由程序员创建或特定工具自动生成源代码,也就是在编译时就已经将接口,

被代理类,代理类等确定下来。在程序运行之前,代理类的.class文件就已经生成。

而动态代理则是在运行时根据java代码中的指示形成的,一般通过Proxy类和InvocationHandler接口来实现

2, 动态代理中invoke方法是如何自动被调用的

invoke方法有3个参数invoke(Object proxy, Method method, Object[] args)

@param  proxy the proxy instance that the method was invoked on

@param  method the {@code Method} instance corresponding to

the interface method invoked on the proxy instance.

根据源码对参数的解释可以知道proxy是Proxy类实例,而method则是代理类所调用的委托类的方法对象

args为方法参数

newProxyInstance方法也有3个参数newProxyInstance(ClassLoader loader,Class[] interfaces,

InvocationHandler h)

@param  loader the class loader to define the proxy class

@param  interfaces the list of interfaces for the proxy class to implement

@param  h the invocation handler to dispatch method invocations to

load 是定义代理类的类加载器,

interface    是代理类需要去实现的一些接口(即委托类实现的接口)

h    是一个InvocationHandler对象,表示的是当我这个动态代理对象在调用方法的时候,

会关联到哪一个InvocationHandler对象上

通过查看

Class cl = getProxyClass0(loader, intfs);

所生成的代理类$Proxy0.class的源码可知,其继承了Proxy类并实现了给定的接口interfaces,当调用方法时,会执行

关联的InvocationHandler对象的invoke方法即

super.h.invoke(this, m4, (Object[])null);

相关文章

  • 认识动态代理随笔

    1. 什么是动态代理 静态代理是一般是由委托类和代理类实现同一个接口,代理类使用组合的方式来对委托类进行扩展代理过...

  • java动态代理

    本文从四个方面认识动态代理 什么是代理? 为什么使用代理? 如何使用动态代理? 动态代理的原理 一 什么是代理 ...

  • 面试系列~动态代理实现与原理

    动态代理有JDK动态代理, CGLIB动态代理, SpringAOP动态代理 一,JDK动态代理  jdk动态代理...

  • 认识JDK动态代理

    这篇博客将介绍Spring入门阶段对jdk动态代理的认识,实现如何创建一个jdk动态代理的程序。不适合处于JDK动...

  • 编程常用的设计模式

    动态代理和静态代理 静态代理 动态代理 静态代理与动态代理的区别 JDK中的动态代理和CGLIB 实现动态代理的方...

  • Spring的AOP原理分析

    一 动态代理 动态代理分为JDK动态代理和CGLIB动态代理 jdk动态代理 被代理类(目标类)和代理类必须实现同...

  • 设计模式之代理模式

    代理分为静态代理和动态代理。 动态代理又包括基于JDK的动态代理、基于CGlib 的动态代理、基于Aspectj实...

  • Java高级主题(五)——动态代理

    代理可以分为静态代理、动态代理,动态代理又可以分为 jvm的动态代理 和 cglib的动态代理。像spring框架...

  • 动态代理

    动态代理分为两类:1、基于接口的动态代理; (JDK动态代理 )2、基于类的动态代理;(cglib动态代理)3、J...

  • 动态代理的两种方式

    静态代理就不说了,基本用到的都是动态代理。 Java中动态代理有JDK动态代理和CGLIB动态代理。 JDK代理的...

网友评论

      本文标题:认识动态代理随笔

      本文链接:https://www.haomeiwen.com/subject/ffiufqtx.html