CGLIB动态代理
CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它可以在运行时扩展Java类与实现Java接口。CGLIB动态带来通过继承被代理类创建代理对象,
因此被代理类不需要实现任何接口。CGLIB利用ASM(一个Java字节码操控和分析框架)来转换字节码并生成新的类,从而实现被代理类方法的拦截和增强。
CGLIB动态代理的优点:(1)无接口限制:CGLIB动态代理通过继承被代理类来创建代理对象,因此无需被代理类实现接口。
(2)更强大的代理能力:由于CGLIB可以代理类,因此它可以处理那些没有接口的类,以及final类和final方法的代理。
(3)高度定制:CGLIB提供了更多的定制选项,可以更加灵活的控制代理对象的行为。
CGLIB动态代理的缺点:
(1)相对复杂:CGLIB动态代理的实现相对赋值,需要借助ASM等字节码操作框架,对于初学者来说可能较难上手。
(2)性能开销较大:由于CGLIB需要生成新的类来实现代理,因此在性能上可能存在一定的开销,尤其是在大量创建和销毁代理对象时。
(3)可能破坏封装性:由于CGLIB是通过继承被代理类来创建代理对象的,这可能会破坏被代理类的封装性,导致一些非预期的行为。
CGLIB动态代理使用场景
(1)当被代理类没有实现接口,或者你需要代理final类或final方法时,CGLIB动态代理是一个很好的选择。
(2)对于需要高度定制代理对象行为的场景,CGLIB动态代理提供了更多的灵活性。
JDK动态代理和CGLIB动态代理都是Java中常用的代理实现方式,它们各有优缺点,适用于不同的场景。在实际开发中,我们应该根据具体需求
来选择合适的处理方式。如果你需要代理的类实现了接口,且对性能要求较高,那么JDK动态代理可能是一个更好的选择;而如果你需要代理没有接口的类,或者
需要代理final类或方法,那么CGLIB动态代理则是一个更合适的选择。
没有合适的资源?快使用搜索试试~ 我知道了~
CGLIB动态代理+CGLIB动态代理完整代码
共43个文件
sample:13个
xml:7个
java:3个
0 下载量 58 浏览量
2024-05-13
10:18:39
上传
评论
收藏 34KB ZIP 举报
温馨提示
CGLIB是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成。cglib通过继承方式实现代理,也就是基于类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。 我们最终是通过一个代理对象去调用方法的,那我们就要获取一个代理对象,cglib代理,是通过Enhancer这个类里面对应的一个create()方法,去生成一个代理对象的。 Enhancer创建一个被代理对象的子类并且拦截所有的方法调用(包括Object中继承的toString和hashCode方法)。Enhancer不能够拦截final方法。Enhancer也不能对final类进行代理操作。 CGLIB体现的是继承思想,所以我们需要把代理类作为我们目标类的一个子类,也就是把目标类设置为父类,代理类去继承它。
资源推荐
资源详情
资源评论
收起资源包目录
JavaSE_CGLIB.zip (43个子文件)
CGLIB动态代理.txt 2KB
JavaSE_CGLIB
pom.xml 817B
src
test
java
main
resources
java
cglib
CGLIBInterceptor.java 2KB
CoderImpl.java 161B
test
CGLIBTest.java 566B
.git
index 728B
HEAD 23B
refs
heads
tags
objects
13
566b81b018ad684f3a35fee301741b2734c8f4 141B
2404bc29da2535f7f7dde84180d85abc60d5a4 303B
94
a25f7f4cb416c083d265558da75d457237d671 155B
b0
1da36e3075cbf890d0486e65940d065af50dea 57B
c8
1387927425636a02ddee9569b42fb65d9413d6 55B
5f
f6309b7199129c1afe4f4ec1906e640bec48c6 288B
pack
83
e044dc7ccc45e23deddc364c4e98f6dd68c659 576B
info
25
8dab9703f9459d0dea5244d0d4004fea3b2a65 75B
a0
f7fe794d65357c60dbc5e779bb13684f47347f 310B
description 73B
info
exclude 240B
hooks
post-update.sample 189B
prepare-commit-msg.sample 1KB
commit-msg.sample 896B
pre-receive.sample 544B
update.sample 4KB
pre-commit.sample 2KB
pre-rebase.sample 5KB
applypatch-msg.sample 478B
fsmonitor-watchman.sample 5KB
push-to-checkout.sample 3KB
pre-applypatch.sample 424B
pre-push.sample 1KB
pre-merge-commit.sample 416B
config 130B
.idea
jarRepositories.xml 864B
uiDesigner.xml 9KB
vcs.xml 185B
workspace.xml 4KB
misc.xml 541B
compiler.xml 545B
.gitignore 184B
target
classes
cglib
CoderImpl.class 494B
AttendanceMethodInterceptor.class 1KB
test
CGLIBTest.class 844B
generated-sources
annotations
.gitignore 490B
共 43 条
- 1
资源评论
祈祷平安,加油
- 粉丝: 665
- 资源: 36
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功