日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

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

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

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供余慶網(wǎng)站建設(shè)、余慶做網(wǎng)站、余慶網(wǎng)站設(shè)計(jì)、余慶網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、余慶企業(yè)網(wǎng)站模板建站服務(wù),10年余慶做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

1.靜態(tài)代理

由程序員創(chuàng)建或者由第三方工具生成,再進(jìn)行編譯;在程序運(yùn)行之前,代理類的.class文件已經(jīng)存在了。靜態(tài)代理通常只代理一個(gè)類,并且要事先知道代理的是什么。

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)代理的代理類在程序運(yùn)行前是不存在的,也就是說代理類在程序運(yùn)行時(shí)才創(chuàng)建的代理模式成為動態(tài)代理。這種情況下,代理類并不是在Java代碼中定義好的,而是在程序運(yùn)行時(shí)根據(jù)我們的在Java代碼中的“指示”動態(tài)生成的。

public class MainClass {
    public static void main(String[] args) {
        //1、創(chuàng)建一個(gè)真實(shí)角色
        Singer target = new Singer();
        //2、調(diào)用Proxy.newProxyInstance方法,并構(gòu)造一個(gè)InvocationHandler對象,
        //3、在對象內(nèi)部重寫invoke方法,同時(shí)調(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)代理---向觀眾問好");//在真實(shí)對象的方法被調(diào)用“前”編寫自己的業(yè)務(wù)邏輯
                Object returnValue = method.invoke(target,args);//此處通過反射調(diào)用真實(shí)對象對應(yīng)的方法;
                System.out.println("動態(tài)代理---向觀眾問好");//在真實(shí)對象的方法被調(diào)用“后”編寫自己的業(yè)務(wù)邏輯
                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代理模式的分類,學(xué)習(xí)完本篇的內(nèi)容后,想必大家已經(jīng)能對靜態(tài)代理和動態(tài)代理有所區(qū)分。在實(shí)際使用時(shí),可以根據(jù)需求自行選擇。


網(wǎng)站題目:創(chuàng)新互聯(lián)Python教程:java代理模式的分類
標(biāo)題鏈接:http://m.5511xx.com/article/cdohhhe.html