CGLIB动态代理

  • 一:CGLIB(Code Generation Library)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成。CGLIB通过继承方式实现代理。
  • 二:使用cglib需要引入cglib的jar包,如果你已经有spring-core的jar包,则无需引入,因为spring中包含了cglib。
  • 三:cglib代理无需实现接口,通过生成类字节码实现代理,比反射稍快,不存在性能问题,但cglib会继承目标对象,需要重写方法,所以目标对象不能为final类

话不多说,直接上代码

package com.zdp.csdn.zdpcsdn.cglibPractice;import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/**
* @author daniel
* @date 2019-05-01 21:44
*/
public class CglibProxy implements MethodInterceptor {//保存被代理的对象private Object target;public CglibProxy(Object target) {this.target = target;}//生成代理对象public Object createCgLibProxy(){//工具类Enhancer enhancer=new Enhancer();//设置被代理的对象,也可以理解为设置父类,因为动态代理类是继承了被动态代理类。enhancer.setSuperclass(target.getClass());//设置回调函数enhancer.setCallback(this);//创建子类的动态代理类对象return enhancer.create();}@Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println("01:打开冰箱门~~~~");method.invoke(target,objects);System.out.println("03:关闭冰箱门~~~~");return null;}}
class test{public static void main(String[] args) {//新建被代理类的对象CglibPractice cglibPractice=new CglibPractice();//生成代理类对象CglibPractice cglibPracticeProxy=(CglibPractice)new CglibProxy(cglibPractice).createCgLibProxy();cglibPracticeProxy.doIt();//控制台输出内容/***01:打开冰箱门~~~~* 02:把大象塞进去~~~~* 03:关闭冰箱门~~~~**/}
}

java原生动态代理类和Cglib的区别

  • 1.JDK动态代理是实现了被代理对象的接口,Cglib是继承了被代理对象。
  • 2.JDK和Cglib都是在运行期生成字节码,JDK是直接写Class字节码,Cglib使用ASM框架写Class字节码,Cglib代理实现更复杂,生成代理类比JDK效率低。
  • 3.JDK调用代理方法,是通过反射机制调用,Cglib是通过FastClass机制直接调用方法,Cglib执行效率更高。Cglib底层将方法全部存入一个数组中,通过数组索引直接进行方法调用
  • 4.代理类将被代理类作为自己的父类并为其中的非final委托方法创建两个方法,一个是与委托方法签名相同的方法(重写机制),它在方法中会通过super调用委托方法;另一个是代理类独有的方法。在代理方法中,它会判断是否存在实现了MethodInterceptor接口的对象,若存在则将调用intercept方法对委托方法进行代理

java CGLIB动态代理相关推荐

  1. Java Cglib 动态代理intercept的参数含义

    如何使用CGLIB创建动态代理,网上已经有很多资料,这里就不再赘述. 直接说结论. 当我们使用自定义类 private static class MethodInterceptorImpl imple ...

  2. 谁与争锋,JDK动态代理大战CGLib动态代理

    文章目录 一.前言 二.基本概念 三.JDK 和 CGLib动态代理区别 3.1 JDK动态代理具体实现原理 3.2 CGLib动态代理 3.3 两者对比 3.4 使用注意 四.JDK 和 CGLib ...

  3. 深入理解Java Proxy和CGLIB动态代理原理

    点击上方关注,每天进步一点点 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译 ...

  4. Java Proxy和CGLIB动态代理原理

    动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...

  5. Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理

    Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理 代理模式 JDK动态代理 CGLIB动态代理 代理模式 代理模式是23种设计模式的一种,指一个对象A通过持有另一个对象B,可以具有B ...

  6. java动态代理和cglib动态代理

    本文转自: http://blog.csdn.net/leon709/article/details/9529307 动态代理应用广泛,spring,Struts等框架很多功能是通过动态代理,或者进一 ...

  7. Java中的原生动态代理和CGLIB动态代理的原理,我不信你全知道!

    作者:CarpenterLee cnblogs.com/CarpenterLee/p/8241042.html 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询 ...

  8. java jdk动态代理 cglib动态代理demo

    最近在研究java动态代理这块,以前也看了很多次java动态代理,感觉一直不是怎么明白,这两天看了看又明白了些,现给出我参考网上写的一个demo jdk动态代理实现: View Code import ...

  9. Java 静态代理、Java动态代理、CGLIB动态代理

    为什么80%的码农都做不了架构师?>>>    Java 的代理就是客户类不再直接和委托类打交道, 而是通过一个中间层来访问, 这个中间层就是代理.为啥要这样呢, 是因为使用代理有 ...

最新文章

  1. docker 嵌套技术 docker outside of docker 可用于一个容器内调用另一个容器内程序 跨容器调用 docker容器内获取自身容器信息
  2. 使用DETR指令提取电子客票票面信息
  3. 程序员关机代码python_Python实现远程开关机【高薪必备技术】
  4. 释放锁以及添加线程对于队列的变化
  5. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节2:I/O控制器
  6. 初学计算机语言者(C语言,C++,java,pytion,C#)
  7. 在这个功能上,iOS 落后 Android 了
  8. linux centeros下Redis的安装
  9. [模板] tarjan/联通分量/dfs树
  10. php 模拟登陆(不带验证码)采集数据
  11. 手动解除浏览器跨域限制
  12. 终极.NET混淆器丨.NET Reactor产品介绍
  13. xp系统配置打印服务器,xp系统打印机纸张大小的自定义设置方法
  14. 试题 基础练习 序列求和
  15. 2022考研数学 张宇 基础班【配套张宇30讲】【免费分享】
  16. 深度解析IPFS是什么
  17. 莫斯卡托葡萄酒的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 在Qt-Creator中使用搜狗输入中文的最简单解决方法(不需要编译安装)
  19. JavaScript——移动端网页特效
  20. 同样的代码不同环境 提示握手失败:ssl_client_socket_impl.cc handshake failed

热门文章

  1. iOS 高德地图(二)(进阶具体使用的细节)
  2. php plaintext,php从邮件正文中提取text / plain
  3. 一页纸项目管理pdf_项目管理,一页纸就够了
  4. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之原型模式
  5. 利用useRef hooks 解决 定时器关闭不到的问题
  6. 【SAP Basis】SAP用户权限管理
  7. OKR是上下同欲的载体
  8. android edittext 输入法表情,Android开发中EditText禁止输入Emoji表情符
  9. LeetCode力扣刷题——简单易懂的贪心算法
  10. 搭建私人网盘(可离线下载、在线播放)