zoukankan      html  css  js  c++  java
  • 浅谈静态代理和动态代理

    所谓代理,就是我写一个代理类,去代理被代理对象的执行业务

    静态代理就是为每一个需要被代理的类写一个代理类,动态代理就是运行时动态生成代理类,主要有JDK提供的和CGlib提供的

    使用哪种由AopProxyFactory根据AdvisedSupport决定 默认目标类是接口 用JDK代理 否则用CGlib

    JDK通过反射 CGlib通过ASM修改字节码实现

    JDK:动态代理类要实现InvocationHandler接口,实现invoke(在代理行为前后增加一些方法)方法,生成时,用类Proxy的newProxyInstance(被代理类的类加载器,被代理类实现的所有接口,被代理对象)方法生成代理类。好处是当接口变了,代理类不用动

      唯一的缺点就是不能代理一个没有接口的类

    JDK如何实现的?

      目的:生成代理对象

      实现:JDK生成的最终真正的代理类,它继承自Proxy并实现了我们定义的Subject接口,在实现Subject接口方法的内部,通过反射调用了InvocationHandlerImpl的invoke方法。

    CGlib:实现MethodInterceptor接口,实现interceptor方法,生成代理类对象不需要接口信息,CGlib提供方法级别的代理、用 cglib.getProxy(被代理对象的类)方法生成代理对象

  • 相关阅读:
    Verilog杂谈
    Hadoop家族学习路线图
    R语言中apply函数
    R语言数组array函数
    R语言列表list函数
    R语言多元素向量
    R语言提取字符串的一部分substring函数
    R语言改变大小写 toupper()和 tolower()函数
    R语言统计字符串的字符数ncahr函数
    R语言格式化数字和字符串format函数
  • 原文地址:https://www.cnblogs.com/team42/p/7208899.html
Copyright © 2011-2022 走看看