靜態代理
靜態代理角色分析
抽象角色:一般使用接口或者抽象類來實現
真實角色:被代理的角色
代理角色:代理真實角色,代理真實角色後,一般會做一些附屬的操作
客戶:使用代理角色來進行一些操作
示例代碼
抽象角色:租房
真實角色:房東要出租房子
代理角色:中介帶客戶看房子,租房子,收中介費。
客戶:找中介,中介代理房東
靜態代理的優點
使得真實角色更加純粹
公共的業務由代理來完成,實現了業務的分工
公共業務發生擴展時變得更加集中和方便
缺點:
類多了,多了代理,工作量增加,開發效率低。
靜態代理再理解
1.創建一個抽象角色:增刪改查業務
創建真是對象,完成增刪改查操作
設置代理角色,增加日誌的實現
代理模式作用:在不改變原有代碼的情況下,實現了對原有功能的增強
AOP的核心思想
動態代理
動態代理和靜態代理的角色一樣
動態代理的代理類是動態生成的,靜態代理的代理類是我們提前寫好的
動態代理分爲兩類:一類是基於接口動態代理,一類是基於類的動態代理
基於接口的動態代理--JDK動態代理
基於類的動態代理--cglib
JDK動態代理需要了解兩個類:InvocationHandler和Proxy
InvocationHandler是由代理實例的調用處理程序實現的接口。每個代理實例都有一個關聯的調用處理程序。當在實例上調用方法時,方法調用將被編碼並分派到其調用處理程序的invoke方法
proxy-調用該方法的代理實例
method-所述方法對應於調用代理實例上的接口方法的實例。方法對象的聲明類將是該方法聲明的接口。
Proxy 代理
提供了創建動態代理類和實例的靜態方法,它也是由這些方法創建的所有動態代理類的超類。
第一個參數classLoader --類加載器來定義代理類
第二個參數interfaces-代理類實現的接口列表
第三個參數h--調度方法調用的調用處理函數
代碼實現
核心:一個動態代理一般代理某一類業務,一個動態代理可以代理多個類,代理的是接口。
如下:同樣可以代理用戶業務增刪改查