動态代理介紹:
作用:
功能增強:代理可以提供額外的功能
控制通路:代理可以控制不讓你通路目标
分類:
靜态代理:簡單容易了解
例如模拟使用者購買U盤的行為
使用者是用戶端,商家是代理,廠家是目标類
用戶端--代理--目标(工廠)類
分析:
代理中實作目标類的時候一定會調用目标類的方法,因為代理類本身沒有目标類的方法,隻有通路目标類才能實作客戶對目标類的通路請求
接口定義需要做的事情 ,代理類和目标類都要對接口進行實作并且一定會調用工廠類的方法,客戶類調用代理類實作接口功能
缺點:
1.工廠類可能不隻有一個,但是當代理類使用靜态代理會随着目标類的增加而增加
2.若目标類進行改動,則會導緻所有實作目标接口的代理類都會需要重寫
是以引入了動态代理....
動态代理:
當目标類很多時,借助動态代理可以解決代理類數量過多以及接口改動對于代理類的影響
在程式的執行該過程中使用jdk的反射機制建立代理類對象并且動态制定需要代理的目标類(略過了省去建立代理類,直接使用代理類對象)
分析:
JDK動态代理:使用java反射包java.long.reflect實作(要求必須有接口)
1.重寫InvocationHandler接口中的invoke方法,作為代理功能的實作
3.通過java.lang.reflect.Proxy中的newProxyInstance()獲得目标類的代理對象
參數:
ClassLoader loader 類加載器
類<?>[] interfaces 目标類的接口
InvocationHandler h 自己重寫的代理類要完成的功能
CGLIB動态代理:使用第三方工具庫,使用繼承目标類在子類中重寫父類方法(能繼承就可以,不能是final修飾)