javascript
Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:
???① JDK動態代理只提供接口的代理,不支持類的代理,要求被代理類實現接口。JDK動態代理的核心是InvocationHandler接口和Proxy類,在獲取代理對象時,使用Proxy類來動態創建目標類的代理類(即最終真正的代理類,這個類繼承自Proxy并實現了我們定義的接口),當代理對象調用真實對象的方法時, InvocationHandler?通過invoke()方法反射來調用目標類中的代碼,動態地將橫切邏輯和業務編織在一起;
?InvocationHandler 的 invoke(Object??proxy,Method??method,Object[] args):proxy是最終生成的代理對象;??method 是被代理目標實例的某個具體方法;??args 是被代理目標實例某個方法的具體入參, 在方法反射調用時使用。
????????② 如果被代理類沒有實現接口,那么Spring AOP會選擇使用CGLIB來動態代理目標類。CGLIB(Code Generation Library),是一個代碼生成的類庫,可以在運行時動態的生成指定類的一個子類對象,并覆蓋其中特定方法并添加增強代碼,從而實現AOP。CGLIB是通過繼承的方式做的動態代理,因此如果某個類被標記為final,那么它是無法使用CGLIB做動態代理的。
(3)靜態代理與動態代理區別在于生成AOP代理對象的時機不同,相對來說AspectJ的靜態代理方式具有更好的性能,但是AspectJ需要特定的編譯器進行處理,而Spring AOP則無需特定的編譯器處理。
IoC讓相互協作的組件保持松散的耦合,而AOP編程允許你把遍布于應用各層的功能分離出來形成可重用的功能組件。?
總結
以上是生活随笔為你收集整理的Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring的AOP理解
- 下一篇: gradle idea java ssm