本文共 856 字,大约阅读时间需要 2 分钟。
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类,但是不可扩展。
参考文献:
旧官网
新官网
转载地址:http://jjlai.baihongyu.com/