CGLIB概述

来源:互联网 发布:淘宝店招尺寸950 编辑:程序博客网 时间:2024/06/06 04:27

1. 代理与被代理对象(目标对象)

代理可以视为目标对象的包装箱,任何对目标对象的访问,都必须通过代理完成,因而可以在代理上对访问目标对象的请求进行控制等。

JDK 1.3开始提供JDK动态代理机制,但是其应用受到一定的限制,即目标对象必须实现一个接口。

对于未实现接口的目标对象,就不能使用JDK提供的动态代理功能,而通过CGLIB库可以实现其动态代理。

 

2. CGLIB(ByteCode Generation Library)是一款Java代码生成库,可以在运行时扩展Java类并实现Java接口。

基于ASM的支持,CGLIB提供了一组高层API,用以生成和转换Java字节码,可用于AOP等的动态代理对象生成和对象的字段访问拦截。


1) CGLIB在应用中的架构模型

其中,ASM是一款小巧高效的字节码操作框架,用于转换和生成字节码。ASM可以视为基于事件的字节码分析器。ASM不仅仅可以用于操作Java字节码,而且可以用于操作脚本语言。

2) CGLIB的版本

时间

版本

说明

Apr. 2016

cglib 3.2.2

Bug fix

Feb. 2016

cglib 3.2.1

regression with Enhancer/CallbackFilter

Oct. 2015

cglib 3.2.0

Java8 compatibility

Dec. 2013

cglib 3.1

update to ASM 4.2

Jan. 2009

cglib 2.2.3

 

May. 2008

cglib 2.2

 

Oct. 2005

cglib 2.1.3

 

Jun. 2005

cglib 2.1.1

 

 

3) CGLIB的二进制发布包

CGLIB的二进制发布包有如下2种形式注意应用时的选择:

cglib-#.#_#.jar,只包含CGLIB类,可以被扩展,但是必须依赖ASM API扩展。

cglib-nodep-#.#_#.jar,包含了CGLIB类和ASM类,但是不可扩展。

 


参考文献:

旧官网 https://sourceforge.net/projects/cglib

新官网https://github.com/cglib/cglib

http://jnb.ociweb.com/jnb/jnbNov2005.html


1 0
原创粉丝点击