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方法會失敗

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