文章转自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生成动态代理类的区别(转)相关推荐

  1. spring service ,controller反向代理生成AOP代理类流程

    一.在applicationContext的beanFactory.preInstantiateSingletons方法中,会初始化所有的单例BEAN. 二. 1.AbstractAutowireCa ...

  2. 4、MyBatis + Log4j日志查看Sql参数、结果集元数据、Mapper代理开发、JDK的动态代理与CGLib代理

    文章目录 MyBatis优化开发 日志 ResultSet如何转换为Java对象 数据库元数据 结果集元数据 Fastjson 基于MyBatis的DAO开发(传统) 推荐mapper代理开发 JDK ...

  3. 【Spring AOP】AOP 底层实现原理 —— 动态代理类的创建(JDK、CGlib)、工厂如何加工原始对象

    AOP编程 AOP 编程 AOP 概念 AOP 编程的开发步骤 切面的名词解释 AOP 的底层实现原理 动态代理类的创建 JDK 的动态代理(原理 + 编码) CGlib 的动态代理 Spring 工 ...

  4. 【Spring】AOP底层实现原理 —— 动态代理类的创建(JDK、CGlib)、工厂加工原始对象

    一.AOP概念 AOP (Aspect Oriented Programing) 面向切面编程 = Spring动态代理开发 以切面为基本单位的程序开发,通过切面间的彼此协同,相互调用,完成程序的构建 ...

  5. jdk动态代理和cglib动态代理实现及区别

    代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 代理模式又分为:静态代理.jdk动态代 ...

  6. 填坑之动态代理生成的代理类文件在哪?

    初衷 最近想研究研究Mybatis源码,了解一下Mybatis的执行过程,从mybatis-config.xml配置文件开始,一直到Mybatis执行CRUD位置,中途出现很多疑惑,今天特记录一个! ...

  7. 查看动态代理生成的代理类字节码

    文章目录 动态代理的知识介绍 用java proxy实现动态代理 查看生成的class代理类字节码 创建代理的源码 动态代理的知识介绍 一.动态代理和Class字节码的关系 动态代理有什么作用及应用场 ...

  8. JDK的动态代理深入解析(Proxy,InvocationHandler)(转)

    一.什么是动态代理 动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际 ...

  9. spring AbstractBeanDefinition创建bean类型是动态代理类的方式

    1.接口 Class<?> resourceClass 2.获取builder BeanDefinitionBuilder builder = BeanDefinitionBuilder. ...

  10. 用通俗易懂的语言去解释JDK的动态代理

    读完本篇文章将会了解以下问题 1.代理模式的定义和目的 2.JDK的动态代理的整体流程 3.代理对象帮我们做了什么 4.为什么JDK的动态代理是基于接口的代理(继承为什么不行) 5.生成代理实例化对象 ...

最新文章

  1. 乱谈管理(优秀部门经理的职业素质)
  2. nginx连接php-fpm sock文件失败502
  3. 3.在slave1机器下载3个安装包解压后,复制给master机器
  4. 计算机网络第4版潘爱民_学术活动 钱江会计实务精英讲坛预告(第84期)| 何继昌 : 战略视角下之财务分析应用实践 兼选股案例分享...
  5. ES更新嵌套数组(使用Java API)
  6. c语言斐波那契数列_剑指Offer-10-I.斐波那契数列
  7. JavaScript中substr和substring
  8. 用户 与组的相关练习
  9. python内置高阶函数_map()函数~~内置的高阶函数
  10. NYOJ 82:迷宫寻宝(一)(BFS)
  11. js截图插件_WordPress外贸网站插件装多了很卡很卡?别慌,试试这招
  12. 机器学习梯度下降举例_举例说明:机器学习
  13. java架构《并发线程中级篇》
  14. 如何编写项目发布文档
  15. 谷歌翻译接口_QTranslate:电脑全局翻译神器
  16. FFmpeg 加水印 加马赛克
  17. 微信小程序如何实现搜索框的防抖功能
  18. OSChina 周二乱弹 ——女孩在身上纹了个四叶草
  19. bttnserv.exe
  20. 前端笔记(11) Vue3 Router 编程式导航 router.push router.replace

热门文章

  1. Ansible详解(九)——Ansible配置文件详解
  2. Tomcat详解(十)——Tomcat性能调优
  3. webpack 优化react项目没有解决的问题
  4. 单页面路由工程使用微信分享及二次分享解决方案
  5. 新年的第一天学习状态感慨
  6. linux下dns视图配置
  7. XSS跨站脚本小结(转)
  8. editplus怎么在前后插入字符
  9. LVS基本介绍及NAT模型配置示例
  10. 【杭电ACM】1.2.6 decimal system