jdk动态代理和cglib动态代理的区别

当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与目标类之间通常会存在关联关系,一个代理类的对象与一个目标类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用目标类的对象的相关方法,来提供特定的服务。 按照代理对象的创建时期不同,可以分为两种:
静态代理:程序员事先写好代理对象类,再对其编译,在程序运行前就已经存在了;
动态代理:应用程序发布后,在运行时,运用反射机制动态创建代理对象。


1.jdk动态代理

jdk动态代理,创建的代理类(自动创建)和目标类实现了相同的接口,目标对象作为代理对象的一个属性,从而使得在调用目标对象相应方法时,可在其前后添加其他业务逻辑。所以jdk代理只能针对实现了接口的类。

2.cglib代理

cglib(code generation library)代理不仅能进行接口代理,也能进行类代理,是对指定的类生成一个子类,覆盖其中的所有方法(不能声明为final)。
使用cglib代理会产生两次构造器调用,第一次是目标类的构造器调用,第二次是CGLIB生成的代理类的构造器调用。如果需要CGLIB代理方法,请确保两次构造器调用不影响应用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值