java基础---动态代理机制
生活随笔
收集整理的這篇文章主要介紹了
java基础---动态代理机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
動態代理的意思是,有一個委托類有一個代理類,讓代理類去實現委托類的方法,這樣既可以對委托類的代碼實現進行封裝和隱藏,還能夠在委托類的基礎上添加額外的一些自定義處理。 兩種代理方式 1.jdk原生的代理方式 2.cglib方式 ===使用jdk動態代理的流程 1.創建接口
===詳細描述cglib動態代理的實現方式? 采用字節碼技術為一個類創建子類,也就是代理類,使用代理類去實現父類的方法。 1.創建委托類 2.創建代理類,實現MethodInterceptor接口,實現intercept方法,在intercept方法里面攔截委托類的方法并且進行增強。 3.通過代理類的getProxy方法創建代理對象,入參是父類的字節碼。 ====jdk實現的動態代理和CGLIB實現的動態代理有什么區別?在spring中切面編程使用的是哪一種呢? jdk實現的時候使用newProxyInstance創建代理對象的時候必須有委托類的接口,所以jdk方式必須有接口;代理類實現了和委托類同樣的接口。 CGlib創建代理類對象不需要接口,生成的類是委托類的子類,實現MethodIntercept接口實現intercept方法。 spring AOP代理機制: 1、若目標對象實現了若干接口,spring使用JDK的java.lang.reflect.Proxy類代理。 優點:因為有接口,所以使系統更加松耦合 缺點:為每一個目標類創建接口 2、若目標對象沒有實現任何接口,spring使用CGLIB庫生成目標對象的子類。 優點:因為代理類與目標類是繼承關系,所以不需要有接口的存在。 缺點:因為沒有使用接口,所以系統的耦合性沒有使用JDK的動態代理好。
====動態代理有什么用處?用代理類實現方法有什么好處? 用處: 1.權限管理 2.日志管理 3.事務管理 好處: 1.隱藏委托類的實現細節,通過代理類在做處理,還能夠在原方法基礎上添加新的實現。 2.能夠在應用運行過程中動態創建對象或者做修改操作而不需要停下應用。實際生產中這是很重要的。
?
2.創建委托類實現接口?
3.創建代理類實現invocationHandler接口,綁定委托類,實現invoke方法。 綁定委托類:使用Proxy.newProxyInstance方法來綁定委托類返回一個代理對象,傳入三個參數:委托類的類加載器,委托類接口,代理類。?
實現invoke代理方法 Object invoke(Object proxy, Method method, Object[] args)?throws?Throwable proxy: 指代我們所代理的那個真實對象 method: 指代的是我們所要調用真實對象的某個方法的Method對象 args: 指代的是調用真實對象某個方法時接受的參數 最后就是創建代理類,綁定后直接調用代理類的方法就可以了。?
===詳細描述cglib動態代理的實現方式? 采用字節碼技術為一個類創建子類,也就是代理類,使用代理類去實現父類的方法。 1.創建委托類 2.創建代理類,實現MethodInterceptor接口,實現intercept方法,在intercept方法里面攔截委托類的方法并且進行增強。 3.通過代理類的getProxy方法創建代理對象,入參是父類的字節碼。 ====jdk實現的動態代理和CGLIB實現的動態代理有什么區別?在spring中切面編程使用的是哪一種呢? jdk實現的時候使用newProxyInstance創建代理對象的時候必須有委托類的接口,所以jdk方式必須有接口;代理類實現了和委托類同樣的接口。 CGlib創建代理類對象不需要接口,生成的類是委托類的子類,實現MethodIntercept接口實現intercept方法。 spring AOP代理機制: 1、若目標對象實現了若干接口,spring使用JDK的java.lang.reflect.Proxy類代理。 優點:因為有接口,所以使系統更加松耦合 缺點:為每一個目標類創建接口 2、若目標對象沒有實現任何接口,spring使用CGLIB庫生成目標對象的子類。 優點:因為代理類與目標類是繼承關系,所以不需要有接口的存在。 缺點:因為沒有使用接口,所以系統的耦合性沒有使用JDK的動態代理好。
====動態代理有什么用處?用代理類實現方法有什么好處? 用處: 1.權限管理 2.日志管理 3.事務管理 好處: 1.隱藏委托類的實現細節,通過代理類在做處理,還能夠在原方法基礎上添加新的實現。 2.能夠在應用運行過程中動態創建對象或者做修改操作而不需要停下應用。實際生產中這是很重要的。
轉載于:https://www.cnblogs.com/buptyuhanwen/p/9412257.html
總結
以上是生活随笔為你收集整理的java基础---动态代理机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react源码分析-setState分析
- 下一篇: Go语言学习重点