CGLIB 和 JDK生成动态代理类的区别(转)
文章转自http://luyuanliang.iteye.com/blog/1137292
AOP 使用的设计模式就是代理模式,是对IOC设计的补充。为了扩展性,往往会加上反射,动态生成字节码,生成代理类。
这里往往还会使用到DI,把代理的实现类通过依赖注入的方式,传给代理工厂。
关于生成动态代理类的方式有两种:JDK和CGLIB。
CGLIB,是一个开源工具。spring 和hibernate已经广泛使用。
关于AOP的概念解释网上有很多。
附件的内容是关于JDK和CGLIB动态生成代理工厂的实例。
JDK动态代理和CGLIB字节码生成的区别?
JDK动态代理只能对实现了接口的类生成代理,而不能针对类
CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
因为是继承,所以该类或方法最好不要声明成final
CGLIB:
1 public Object createProxyObject(Object obj) { 2 this.targetObject = obj; 3 Enhancer enhancer = new Enhancer(); 4 enhancer.setSuperclass(obj.getClass()); 5 enhancer.setCallback(this); 6 Object proxyObj = enhancer.create(); 7 return proxyObj;// 返回代理对象,返回的对象其实就是一个封装了“实现类”的代理类,是实现类的实例。 8 }
JDK:
1 public Object newProxy(Object targetObject) {// 将目标对象传入进行代理 2 this.targetObject = targetObject; 3 return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), 4 targetObject.getClass().getInterfaces(), this);// 返回代理对象 5 }
看上面的代码。在动太生成代理类时,传递的是实现类所所实现的接口argetObject.getClass().getInterfaces()。JDK只能对于接口进行做代理。如果换成类的话,则会抛java.lang.ClassCastException异常。
转载于:https://www.cnblogs.com/shuaiandjun/p/7342393.html
CGLIB 和 JDK生成动态代理类的区别(转)相关推荐
- spring service ,controller反向代理生成AOP代理类流程
一.在applicationContext的beanFactory.preInstantiateSingletons方法中,会初始化所有的单例BEAN. 二. 1.AbstractAutowireCa ...
- 4、MyBatis + Log4j日志查看Sql参数、结果集元数据、Mapper代理开发、JDK的动态代理与CGLib代理
文章目录 MyBatis优化开发 日志 ResultSet如何转换为Java对象 数据库元数据 结果集元数据 Fastjson 基于MyBatis的DAO开发(传统) 推荐mapper代理开发 JDK ...
- 【Spring AOP】AOP 底层实现原理 —— 动态代理类的创建(JDK、CGlib)、工厂如何加工原始对象
AOP编程 AOP 编程 AOP 概念 AOP 编程的开发步骤 切面的名词解释 AOP 的底层实现原理 动态代理类的创建 JDK 的动态代理(原理 + 编码) CGlib 的动态代理 Spring 工 ...
- 【Spring】AOP底层实现原理 —— 动态代理类的创建(JDK、CGlib)、工厂加工原始对象
一.AOP概念 AOP (Aspect Oriented Programing) 面向切面编程 = Spring动态代理开发 以切面为基本单位的程序开发,通过切面间的彼此协同,相互调用,完成程序的构建 ...
- jdk动态代理和cglib动态代理实现及区别
代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 代理模式又分为:静态代理.jdk动态代 ...
- 填坑之动态代理生成的代理类文件在哪?
初衷 最近想研究研究Mybatis源码,了解一下Mybatis的执行过程,从mybatis-config.xml配置文件开始,一直到Mybatis执行CRUD位置,中途出现很多疑惑,今天特记录一个! ...
- 查看动态代理生成的代理类字节码
文章目录 动态代理的知识介绍 用java proxy实现动态代理 查看生成的class代理类字节码 创建代理的源码 动态代理的知识介绍 一.动态代理和Class字节码的关系 动态代理有什么作用及应用场 ...
- JDK的动态代理深入解析(Proxy,InvocationHandler)(转)
一.什么是动态代理 动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际 ...
- spring AbstractBeanDefinition创建bean类型是动态代理类的方式
1.接口 Class<?> resourceClass 2.获取builder BeanDefinitionBuilder builder = BeanDefinitionBuilder. ...
- 用通俗易懂的语言去解释JDK的动态代理
读完本篇文章将会了解以下问题 1.代理模式的定义和目的 2.JDK的动态代理的整体流程 3.代理对象帮我们做了什么 4.为什么JDK的动态代理是基于接口的代理(继承为什么不行) 5.生成代理实例化对象 ...
最新文章
- 乱谈管理(优秀部门经理的职业素质)
- nginx连接php-fpm sock文件失败502
- 3.在slave1机器下载3个安装包解压后,复制给master机器
- 计算机网络第4版潘爱民_学术活动 钱江会计实务精英讲坛预告(第84期)| 何继昌 : 战略视角下之财务分析应用实践 兼选股案例分享...
- ES更新嵌套数组(使用Java API)
- c语言斐波那契数列_剑指Offer-10-I.斐波那契数列
- JavaScript中substr和substring
- 用户 与组的相关练习
- python内置高阶函数_map()函数~~内置的高阶函数
- NYOJ 82:迷宫寻宝(一)(BFS)
- js截图插件_WordPress外贸网站插件装多了很卡很卡?别慌,试试这招
- 机器学习梯度下降举例_举例说明:机器学习
- java架构《并发线程中级篇》
- 如何编写项目发布文档
- 谷歌翻译接口_QTranslate:电脑全局翻译神器
- FFmpeg 加水印 加马赛克
- 微信小程序如何实现搜索框的防抖功能
- OSChina 周二乱弹 ——女孩在身上纹了个四叶草
- bttnserv.exe
- 前端笔记(11) Vue3 Router 编程式导航 router.push router.replace