AOP:JDK动态代理 vs CGLIB代理

59 篇文章 0 订阅

AOP面向切面编程,其极大的简化了代码的工作量受到了j2ee程序员的一致好评,分为静态代理和动态代理,静态代理主要是在启动时修改被代理类的字节码从而实现代理的效果,这里不做详述,主要分析下AOP动态代理。

首先看下AOP两种动态代理的区别:

1)JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成目标对象的代理。

2)CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象时针对目标类扩展的子类,CGLIB是高效的代码生成包,底层是依靠ASM(开源的java字节码编辑类库)操作字节码实现的,性能比JDK强。


优劣势比较:

1)JDK动态代理的性能不如CGLIB代理

2)JDK动态代理的被代理类必须是某个接口的实现,而CGLIB不用必须实现接口

3)JDK动态代理是jdk自带代理,可直接使用;使用CGLIB代理需要额外引入CGLIB库,甚至要在配置文件中配置(下面会详细说明)


AOP如何选择使用哪种代理:

1)如果被代理的目标对象实现了至少一个借口,则会使用JDK动态代理,所有该目标类型实现的接口都将被代理;

2)若该目标对象没有实现任何接口,则创建一个CGLIB代理;

3)强制使用CGLIB代理实现AOP:

    a、添加CGLIB库,Spring_HOME/cglib/*.jar

    b、在spring配置文件中加入   <aop:aspectj-autoproxy proxy-target-class="true"/>


JDK动态代理实现,请参考:http://blog.csdn.net/qq_21033663/article/details/78950714


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值