关于Cglib的浅述

原创 2018年04月17日 15:05:27

前些天,和以为前辈聊起来动态代理,发现自己还是有些短板的,这里简单梳理一下。

Java中说到动态代理并不陌生,在AOP框架、Spring中、ORM(Hibernate)中等许多情况都会用到;动态代理相对的就有静态代理,不过静态代理使用起来不尽人意,这里不在赘述。这里主要说一下Cglib。

在之前的我的博客里浅述过关于JDK和Cglib的区别和各自的使用情景;但经过知识梳理、自省后,发现对Cglib的底层并没有了解到,这里浅述一下:

Cglib应用情景:动态代理、AOP(在代理中,Cglib会生成代理类的子类,子类中有除了代理类中Final之外的全部行为,同时会对其父类调用进行拦截、目的是织入横向逻辑,实现代理类的加强等效果)、ORM(Hibernate、代理单端情况(二级缓存:一级为session层;二级为sessionFactory层))、LazyLoad(懒加载,通过是否执行对象实例化进行加载,不同情况执行情况多种);

Cglib底层:ASM(字节码操作框架,还有javassist)
我们知道Java是解释性语言,在编程完毕后,后形成.java文件放在磁盘中,这些文件经过解析后会形成.class文件,class字节码文件是根据JVM虚拟机规范中规定的字节码组织规则生成的,这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,通过对.class 文件解析出的二进制信息,生成对应的 Class对象:
在运行时期可以按照Java虚拟机规范对class文件的组织规则生成对应的二进制字节码,这就是ASM。
ASM 是一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。
注:不过ASM在创建class字节码的过程中,操纵的级别是底层JVM的汇编指令级别。

Cglib相对JDK优势:比JDK功能更强大,速度更快(JDK是通过反射形成代理类),可以针对无接口情况;
Cglib不足:无法代理代理目标的Fianl行为;
上面说的是一些简要的特点;关于Cglib的代理实现代码在之前的博客中https://blog.csdn.net/zghwaicsdn/article/details/50957474已经贴出来了。

版权声明:欢迎转载,注明作者和出处就好!如果不喜欢或文章存在明显的谬误,请留言说明原因再踩哦,谢谢,不断进步! https://blog.csdn.net/qq_34417408/article/details/79975062

ITU_TG_729AnnexA语音压缩编码算法的浅述

  • 2010年05月23日 10:38
  • 1.12MB
  • 下载

关于<!DOCTYPE html>浅述

踩坑: 说到,这个怕是入门的前端程序员都了解是做什么的,基本的浏览器解析规范;但还是前段日子踩到了这个坑。项目在我接手之前,jsp文件是写好的,我只是在基础上进行界面的优化(做后端的入行必然会...
  • qq_34417408
  • qq_34417408
  • 2018-01-26 14:04:05
  • 82

浅述机电一体化链条输送设备设计

  • 2011年07月08日 11:53
  • 162KB
  • 下载

实时数据库--概念浅述

实时数据库(RTDB-Real Time DataBase)是数据库系统发展的一个分支,是数据库技术结合实时处理技术产生的。    实时数据库系统是开发实时控制系统、数据采集系统、CIMS系统等的支撑...
  • Herman_He
  • Herman_He
  • 2015-12-07 13:40:03
  • 386

自定义控件 浅述

自定义控件 1. 在res->values->attrs.xml中声明你要自定义的属性(如果没有 attrs.xml可以新建一个) 例如这个 其中 代...
  • qq_22994781
  • qq_22994781
  • 2016-05-30 16:11:22
  • 119

工厂模式浅述

使用设计模式的目的: 1、缩短开发周期 2、降低维护成本 3、应用程序和内部接口集成更轻松工厂模式包括: 简单工厂模式、工厂方法模式、抽象工厂模式1、简单工场模式 由抽象产品角色、具体产品角...
  • qq_34417408
  • qq_34417408
  • 2017-10-06 16:19:01
  • 204

javascript浅述

javascript:http://blog.csdn.net/xiaowei1122/article/details/7284478
  • sangbody
  • sangbody
  • 2012-02-22 19:22:31
  • 149

Widget工作原理浅述

长按Launcher,Launcher会发出Intent调起AppWidgetPickActivity.这个activity就是我们看到的...
  • Ferrero_xx
  • Ferrero_xx
  • 2014-06-11 17:51:31
  • 593

计算机语言浅述

计算机语言浅述       如果您想学习编程,却又不知从何入手,那么您不妨看看下面的几种学习方案,可能会给您一些启示吧!   方案一 Basic语言 & Visual B...
  • weixin_40668918
  • weixin_40668918
  • 2017-10-17 12:07:32
  • 24

浅述 Java 并发

浅述 Java 并发 volatile volatile只能保证变量对各个线程的可见性,但不能保证原子性。关于 Java语言 volatile 的使用方法就不多说了,我的建议是 除了 配合pack...
  • bifan546
  • bifan546
  • 2017-09-08 18:33:56
  • 94
收藏助手
不良信息举报
您举报文章:关于Cglib的浅述
举报原因:
原因补充:

(最多只允许输入30个字)