1. 程式人生 > >Cglib,asm,Aspect,JDK原生的代理模式這四種有哪些差別,原理各是什麼?

Cglib,asm,Aspect,JDK原生的代理模式這四種有哪些差別,原理各是什麼?

1.jdk是內部生成了一個實現了被代理類所有介面的代理類,用反射來呼叫InvocationHandler的invoke方法來代理所有類,生成速度最快,執行速度最慢。
2.asm直接操作位元組碼,然後用classload載入如jvm裡,生成速度慢,執行速度較快。
3.感覺cglib是對asm的封裝啊,不用瞭解那麼多class類結構就可以用了。由於封裝效能比asm差點,但是比JDK快。

4.aspectJ是編譯的時候直接編譯入切面,速度應該是最快的。

  使用cglib為目標類提供動態代理:需要匯入cglib.jar和asm.jar。如果出現asm中的類無法找到的異常,在java工程中是真的缺少asm.jar,而在web工程中很可能是asm.jar和spring提供的org.springframework.asm-3.0.4.RELEASE.jar包衝突。