Spring-靜態/動態代理模式

靜態代理

靜態代理角色分析

抽象角色:一般使用接口或者抽象類來實現

真實角色:被代理的角色

代理角色:代理真實角色,代理真實角色後,一般會做一些附屬的操作

客戶:使用代理角色來進行一些操作

示例代碼

抽象角色:租房

真實角色:房東要出租房子

代理角色:中介帶客戶看房子,租房子,收中介費。

客戶:找中介,中介代理房東

靜態代理的優點

使得真實角色更加純粹

公共的業務由代理來完成,實現了業務的分工

公共業務發生擴展時變得更加集中和方便

缺點:

類多了,多了代理,工作量增加,開發效率低。

靜態代理再理解

1.創建一個抽象角色:增刪改查業務

創建真是對象,完成增刪改查操作

設置代理角色,增加日誌的實現


代理模式作用:在不改變原有代碼的情況下,實現了對原有功能的增強

AOP的核心思想

動態代理

動態代理和靜態代理的角色一樣

動態代理的代理類是動態生成的,靜態代理的代理類是我們提前寫好的

動態代理分爲兩類:一類是基於接口動態代理,一類是基於類的動態代理

基於接口的動態代理--JDK動態代理

基於類的動態代理--cglib

JDK動態代理需要了解兩個類:InvocationHandler和Proxy

InvocationHandler是由代理實例的調用處理程序實現的接口。每個代理實例都有一個關聯的調用處理程序。當在實例上調用方法時,方法調用將被編碼並分派到其調用處理程序的invoke方法

proxy-調用該方法的代理實例

method-所述方法對應於調用代理實例上的接口方法的實例。方法對象的聲明類將是該方法聲明的接口。

Proxy 代理

提供了創建動態代理類和實例的靜態方法,它也是由這些方法創建的所有動態代理類的超類。

第一個參數classLoader --類加載器來定義代理類

第二個參數interfaces-代理類實現的接口列表

第三個參數h--調度方法調用的調用處理函數

代碼實現


核心:一個動態代理一般代理某一類業務,一個動態代理可以代理多個類,代理的是接口。

如下:同樣可以代理用戶業務增刪改查

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章