新聞中心
說到代理,大家肯定都有接觸過。畢竟當有些事務不想親自處理時,會選擇委托給別人進行解決。那么在java中也有著這樣的機制,叫做代理模式。主要分為兩大類:靜態(tài)代理和動態(tài)代理。一種是運行前就存在,另一種是運行后才進行創(chuàng)建。下面我們就java中的兩種代理模式進行講解。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供余慶網(wǎng)站建設(shè)、余慶做網(wǎng)站、余慶網(wǎng)站設(shè)計、余慶網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、余慶企業(yè)網(wǎng)站模板建站服務,10年余慶做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務。
1.靜態(tài)代理
由程序員創(chuàng)建或者由第三方工具生成,再進行編譯;在程序運行之前,代理類的.class文件已經(jīng)存在了。靜態(tài)代理通常只代理一個類,并且要事先知道代理的是什么。
public class BlogStaticProxy implements IBlogService{
private IBlogService blogService;
public BlogStaticProxy(IBlogService blogService) {
this.blogService = blogService;
}
@Override
public void writeBlog() {
System.out.println("start writing...");
blogService.writeBlog();
System.out.println("end writing...");
}
}
2.動態(tài)代理
動態(tài)代理的代理類在程序運行前是不存在的,也就是說代理類在程序運行時才創(chuàng)建的代理模式成為動態(tài)代理。這種情況下,代理類并不是在Java代碼中定義好的,而是在程序運行時根據(jù)我們的在Java代碼中的“指示”動態(tài)生成的。
public class MainClass {
public static void main(String[] args) {
//1、創(chuàng)建一個真實角色
Singer target = new Singer();
//2、調(diào)用Proxy.newProxyInstance方法,并構(gòu)造一個InvocationHandler對象,
//3、在對象內(nèi)部重寫invoke方法,同時調(diào)用method.invoke(target,args);
//4、并在該方法的上下添加自己的代碼邏輯
//其中:target.getClass().getClassLoader():獲取類加載器,用來生成代理對象;
// target.getClass().getInterfaces()獲取接口元信息;
ISinger iSinger = (ISinger) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("動態(tài)代理---向觀眾問好");//在真實對象的方法被調(diào)用“前”編寫自己的業(yè)務邏輯
Object returnValue = method.invoke(target,args);//此處通過反射調(diào)用真實對象對應的方法;
System.out.println("動態(tài)代理---向觀眾問好");//在真實對象的方法被調(diào)用“后”編寫自己的業(yè)務邏輯
return returnValue;
}
});
iSinger.sing();
}
}
//測試結(jié)果
"C:\Program Files\Java\jdk1.8.0_211\bin\java.exe" "-javaagent:C:\Program.......
動態(tài)代理---向觀眾問好
sing a song
動態(tài)代理---向觀眾問好
Process finished with exit code 0
以上就是java代理模式的分類,學習完本篇的內(nèi)容后,想必大家已經(jīng)能對靜態(tài)代理和動態(tài)代理有所區(qū)分。在實際使用時,可以根據(jù)需求自行選擇。
標題名稱:創(chuàng)新互聯(lián)Python教程:java代理模式的分類
當前地址:http://www.dlmjj.cn/article/cdohhhe.html


咨詢
建站咨詢
