Spring-10-AOP先驗知識之代理模式
阿新 • • 發佈:2020-08-26
10. 代理模式
在學AOP之前,先理解代理模式!
為什麼要學習代理模式?
因為這就是Spring AOP的底層!
【SpringAOP和SpringMVC】
代理模式的分類:
- 靜態代理
- 動態代理
10.1 靜態代理
角色分析:
- 抽象角色:一般會使用介面和抽象類來解決
- 真實角色:被代理的角色
- 代理角色:代理真實角色,代理真實角色後,一般會做一些附屬操作
- 客戶:訪問代理物件的人
程式碼演示步驟:
-
介面
//租房案例 public interface Rent { public void rent(); }
-
真實角色
//房東 public class Host implements Rent{ public void rent() { System.out.println("房東要出租房子!"); } }
-
代理角色
public class Proxy implements Rent{ private Host host; public Proxy() { } public Proxy(Host host) { this.host = host; } public void rent() { seeHouse(); host.rent(); hetong(); fare(); } //看房 public void seeHouse(){ System.out.println("中介帶你看房!"); } //收中介費 public void fare(){ System.out.println("收中介費!"); } //籤合同 public void hetong(){ System.out.println("籤租賃合同!"); } }
-
客戶端訪問代理角色
public class Client {
public static void main(String[] args) {
Host host = new Host();
//代理,中介一般會有一些附屬操作
Proxy proxy = new Proxy(host);
//不用直接面對房東,直接找中介租房即可
proxy.rent();
}
}
代理模式的好處:
- 可以使真實角色的操作更加純粹!不用去關注公共業務!
- 公共業務交給代理角色!實現了業務的分工!
- 公共業務發生擴充套件的時候,方便集中管理!
缺點:
- 一個真實角色會產生一個代理角色;開發效率會變低。
10.2 加深理解
聊聊AOP
10.3 動態代理
- 動態代理和靜態代理角色一樣
- 動態代理的代理類是動態生成的,不是直接寫好的!
- 動態代理也分類兩大類:
- 基於介面的動態代理【我們這裡使用】
- JDK動態代理
- 基於類的動態代理
- cglib
- java位元組碼實現:javasist
- 基於介面的動態代理【我們這裡使用】
需要了解兩個類:
- Proxy:代理;
- InvocationHandler:呼叫處理程式;
動態代理的好處:
- 可以使真實角色的操作更加純粹!不用去關注公共業務!
- 公共業務交給代理角色!實現了業務的分工!
- 公共業務發生擴充套件的時候,方便集中管理!
- 一個動態代理類代理的是一個介面,一般就是對應的一類業務!
- 一個動態代理類可以代理多個類,只要實現了同一個介面即可!