静态代理详解[通俗易懂](静态方法和非静态方法区别)
什么是靜態代理?
代理這個詞是來源于Java設計模式中的代理模式,代理模式最簡單的理解就是通過第三方來代理我們的工作
比如中介,房東需要將自己的房子租出去,而租客需要租房子,三者關系如此
租客租房子一般都找不到房東,房東也不會輕易將自己暴露給廣大租客,因此就需要中介來充當這個中間關系
因此租客就只能通過中介來進行租房子這個工作,不需要通過房東,這就叫做代理—-就是中介代理房東來處理租房子這件事情
那么我們應用于Java中又是什么樣的情況呢?
首先創建一個主題接口(創建接口,JDK動態代理就是以接口、對象、代理對象為基礎)
public interface UserDao(){
void add();
}
然后創建該接口的實現類(真實主題),也稱為被代理類(主要功能就在于該類中),我們需要一個代理類來代理這個類實現他的add方法
public class UserDaoImpl implements UserDao(){
@Override
public void add(){
System.out.println("add.....");
}
}
然后我們創建上述實現類的代理類(兩個類需要實現共同的主題接口,這樣才能對原有功能進行增強),使用代理類對原有類進行包裝
public class UserDaoProxy implements UserDao{
private UserDao target;
public UserDaoProxy(UserDao target){
this.target = target;
}
public void add(){
System.out.println("before...");
target.add();
System.out.println("after...");
}
}
然后我們進行測試
@Test
public void test1(){
UserDao userDao = new UserDaoImpl();
UserDaoProxy proxy = new UserDaoProxy(userDao);
proxy.add();
}
此圖為結果輸出
可能有人會問,這樣是不是多此一舉,為什么要去代理呢,而且前兩段代碼就能實現的功能,為什么還需要一個代理類去代理它,這就涉及到我們的工作需求,在不改變實現類的情況下,對實現類進行功能的增加,而上述代碼中兩個輸出語句就是對功能的增強(當然可以根據實際需求來添加實際代碼),由此而產生了代理類,生成代理對象
而所謂的靜態就是在創建代理類的時候,接口和被代理類都已經被固定了,無法改變,代理類就只能這一種類,我們主要的是實現代理功能,實際上已經完成了這個功能,
當實際開發中有很多這樣的主題接口和類需要功能增強時,就需要更多的代理類,即每一個主題接口都得創建一個代理類,會造成代碼的繁多和冗余,因此就產生了我們的動態代理技術https://blog.csdn.net/qq_42051306/article/details/114141307?spm=1001.2014.3001.5501
總結
以上是生活随笔為你收集整理的静态代理详解[通俗易懂](静态方法和非静态方法区别)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地下城玩一会出现bad怎么办
- 下一篇: OPPO Reno10系列配超光影潜望长