题目
以下有关CGLIB代理相关说法正确的是。()A. CGLIB 代理的使用非常简单,但它还有一定的局限性 —— 使用动态代理的对象必须实现一个或多个接口。B. 如果要对没有实现接口的类进行代理,那么可以使用 CGLIB 代理。C. CGLIB 是一个高性能开源的代码生成包,在使用时需要另外导入 CGLIB 所需要的包。D. Spring 中的 AOP 代理,可以是 JDK 动态代理,也可以是 CGLIB 代理
以下有关CGLIB代理相关说法正确的是。()
A. CGLIB 代理的使用非常简单,但它还有一定的局限性 —— 使用动态代理的对象必须实现一个或多个接口。
B. 如果要对没有实现接口的类进行代理,那么可以使用 CGLIB 代理。
C. CGLIB 是一个高性能开源的代码生成包,在使用时需要另外导入 CGLIB 所需要的包。
D. Spring 中的 AOP 代理,可以是 JDK 动态代理,也可以是 CGLIB 代理
题目解答
答案
C. CGLIB 是一个高性能开源的代码生成包,在使用时需要另外导入 CGLIB 所需要的包。
解析
本题考查CGLIB代理的核心概念,包括其适用场景、实现原理及与Spring框架的关联。解题关键在于:
- 区分JDK动态代理与CGLIB代理的条件:JDK代理需目标类实现接口,而CGLIB通过生成子类实现代理,无需接口。
- CGLIB的第三方库特性:CGLIB不属于JDK自带包,需额外导入依赖。
- Spring AOP的代理策略:Spring根据目标类是否实现接口,自动选择JDK或CGLIB代理。
选项分析
选项A
错误。CGLIB代理的核心特点是无需目标类实现接口,而JDK动态代理才需要接口。混淆两者条件导致选项错误。
选项B
正确。CGLIB通过生成子类代理对象,因此适用于未实现接口的类。但根据题目设定,正确答案为C,可能存在题目选项设计矛盾。
选项C
正确。CGLIB是第三方开源库,需手动添加依赖(如cglib和asm包),描述准确。
选项D
正确。Spring AOP支持JDK动态代理(优先)和CGLIB代理(无接口时),但题目答案仅标C,可能题目存在选项冲突。