Spring AOP中JDK动态代理与CGLIB的比较

一、功能比较

1、JDK动态代理是基于接口的,要求被代理的类必须实现一个接口。

2、CGLIB通过继承方式代理目标类,要求目标类不能是final的。

二、性能比较

1、采用JDK8进行一千万次的测试:

JDK动态代理:152836ms

          CGLIB:154783ms

可以得出结论:在JDK8下面JDK动态代理的性能是优于CGLIB的

三、Spring使用二者的顺序

1、有接口的情况下,AOP 默认使用 JDK 动态代理

2、如果没有接口的情况下,只能使用CGLIB

3、如果强制使用CGLIB,则需要在Spring的配置文件中设置proxy-target-class = true

<aop:aspectj-autoproxy proxy-target-class="true"/>

四、注意事项

1、Spring AOP不支持代理类内部方法调用的拦截,比如类中a方法调用b方法,切面拦截b方法会失败

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章