cglib为什么无法完全替换动态代理(cglib无法增强的类)

Cglib为什么不能完全替换 动态代理

看到好多地方对比CGLIB和动态代理来实现AOP的, 感觉就是一边倒的. CGLIB什么都好, 比如:

目标对象可以是Interface或者Class,不像动态代理只支持Interface
CGlib性能也好.

看到这些,我就有一个疑问, 既然如此优秀, 为什么动态代理还有存在的必要呢.带着这个疑问,我研究了一下CGLIB的不足.对比动态代理来实现AOP,CGLIB需要有2个前提条件,都是动态代理不存在的.

final Class不支持, 因为CGLIB是生成子类来实现AOP,所以final Class自然无法支持了.
需要强制无参数构造函数
其实从JAVA实现AOP这个角度,大致有2个方法,

一个是通过设计模式:比如代理,装饰器,责任链之类. 这几种的前提就是前期设计比较好,也就是要设计要依赖于接口而不是实现. 比如我认为Struts2的拦截器也是AOP的一种.
一个就是生成子类:也就是Cglib所选择的这种方法,就会有上面所说说的2个限制.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值