日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:java代理模式的分類

說到代理,大家肯定都有接觸過。畢竟當有些事務不想親自處理時,會選擇委托給別人進行解決。那么在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