国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

動(dòng)態(tài)代理模式

chavesgu / 696人閱讀

摘要:實(shí)現(xiàn)數(shù)據(jù)庫操作關(guān)于人員的數(shù)據(jù)庫操作定義一個(gè)代理類代理,如果使用靜態(tài)代理,那么這個(gè)類必須實(shí)現(xiàn)接口,這里采用動(dòng)態(tài)代理類,免去實(shí)現(xiàn)代理類定義的所有接口。

描述:代理對象和被代理對象具有相同的行為,客戶端通過代理對象實(shí)現(xiàn)對被代理對象調(diào)用,代理對象除了可以代理被代理對象的所有行為外,還可以在被代理對象的所有行為上添加一些額外的內(nèi)容,如開閉事務(wù),權(quán)限攔截等;動(dòng)態(tài)代理可以生成一個(gè)不用實(shí)現(xiàn)被代理類所有接口的代理類,它內(nèi)部通過被代理類的classLoader和反射機(jī)制實(shí)現(xiàn)被代理類的所有接口。。

場景:在數(shù)據(jù)庫操作中,假如所有增刪改查操作都需要加log記錄,可以代理這個(gè)數(shù)據(jù)庫操作,然后在運(yùn)行這些增刪改查操作時(shí)加一個(gè)log記錄,客戶端使用方式仍然不變。

實(shí)現(xiàn):

數(shù)據(jù)庫操作:

interface Dao {
    void insert();
    void delete();
}

關(guān)于人員的數(shù)據(jù)庫操作:

class UserDao implements Dao {
    @Override
    public void insert() {
        System.out.println("insert user instance to db!");
    }
    @Override
    public void delete() {
        System.out.println("delete user instance from db!");
    }
}

定義一個(gè)代理類代理UserDao,如果使用靜態(tài)代理,那么這個(gè)類必須實(shí)現(xiàn)Dao接口,這里采用動(dòng)態(tài)代理類,免去實(shí)現(xiàn)代理類定義的所有接口。

class UserDaoProxy implements InvocationHandler {
    Dao dao;
    UserDaoProxy(Dao dao) {
        this.dao = dao;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        before();
        Object result = method.invoke(dao, args);
        after();
        return result;
    }
    private void before() {
        System.out.println("開始log...");
    }
    private void after() {
        System.out.println("結(jié)束log");
    }
}

客戶端調(diào)用:

public class ProxyDemo {
    public static void main(String[] args) {
        UserDaoProxy proxy = new UserDaoProxy(new UserDao());
        Dao dao = (Dao)Proxy.newProxyInstance(UserDao.class.getClassLoader(), UserDao.class.getInterfaces(), proxy);
        dao.insert();
        dao.delete();
    }
}

打印結(jié)果:

  

開始log...
insert user instance to db!
結(jié)束log
開始log...
delete user instance from db!
結(jié)束log

結(jié)論:通過代理類即能保持原接口調(diào)用不變,還能對接口調(diào)用的前后增加額外的業(yè)務(wù)代碼,甚至可以改變接口的實(shí)現(xiàn),why?想想現(xiàn)實(shí)中的代理就知道了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64007.html

相關(guān)文章

  • Java三種代理模式:靜態(tài)代理動(dòng)態(tài)代理和cglib代理

    摘要:動(dòng)態(tài)代理又被稱為代理或接口代理。靜態(tài)代理在編譯時(shí)產(chǎn)生字節(jié)碼文件,可以直接使用,效率高。代理無需實(shí)現(xiàn)接口,通過生成類字節(jié)碼實(shí)現(xiàn)代理,比反射稍快,不存在性能問題,但會(huì)繼承目標(biāo)對象,需要重寫方法,所以目標(biāo)對象不能為類。 一、代理模式介紹 代理模式是一種設(shè)計(jì)模式,提供了對目標(biāo)對象額外的訪問方式,即通過代理對象訪問目標(biāo)對象,這樣可以在不修改原目標(biāo)對象的前提下,提供額外的功能操作,擴(kuò)展目標(biāo)對象的功...

    Kaede 評(píng)論0 收藏0
  • 動(dòng)態(tài)代理模式實(shí)現(xiàn)原理

    摘要:代理模式概念代理模式分為兩種,一種是靜態(tài)代理模式,一種是動(dòng)態(tài)代理模式。面向切面的編程也是使用動(dòng)態(tài)代理模式來實(shí)現(xiàn)的。 1.代理模式概念 代理模式分為兩種,一種是靜態(tài)代理模式,一種是動(dòng)態(tài)代理模式。 靜態(tài)代理模式:在程序運(yùn)行之前需要寫好代理類 動(dòng)態(tài)代理模式:在程序運(yùn)行期間動(dòng)態(tài)生成代理類 2.動(dòng)態(tài)代理的實(shí)現(xiàn) 動(dòng)態(tài)代理實(shí)現(xiàn)的步驟: (1)寫一個(gè)代理類SubjectHandler實(shí)現(xiàn)Invoca...

    songjz 評(píng)論0 收藏0
  • Java 動(dòng)態(tài)代理(Dynamic proxy) 小結(jié)

    摘要:代理模式基本概念不論是靜態(tài)代理還是動(dòng)態(tài)代理其本質(zhì)都是代理模式的一種實(shí)現(xiàn)那么什么是代理模式呢代理模式即給某一個(gè)對象提供一個(gè)代理并由代理對象控制對原對象的引用代理模式其實(shí)取材于實(shí)際生活例如我們生活中常見的房屋租賃代理我們在租房時(shí)一般不是直接和房 代理模式 基本概念 不論是靜態(tài)代理還是動(dòng)態(tài)代理, 其本質(zhì)都是代理模式的一種實(shí)現(xiàn), 那么什么是代理模式呢?代理模式, 即給某一個(gè)對象提供一個(gè)代理, ...

    Jason 評(píng)論0 收藏0
  • 代理模式

    摘要:簡介代理模式委托模式就是使用代理對象來訪問目標(biāo)對象這樣可以在目標(biāo)對象執(zhí)行前后來做一些邏輯處理這里使用到編程中的一個(gè)思想不要隨意去修改別人已經(jīng)寫好的代碼或者方法如果需改修改可以通過代理的方式來擴(kuò)展該方法代理模式通用類圖設(shè)計(jì)模式之禪文中提到為其 簡介 代理模式(委托模式)就是使用代理對象來訪問目標(biāo)對象, 這樣可以在目標(biāo)對象執(zhí)行前后, 來做一些邏輯處理. 這里使用到編程中的一個(gè)思想:不要隨意...

    keithxiaoy 評(píng)論0 收藏0
  • 慕課網(wǎng)_《模式的秘密之代理模式》學(xué)習(xí)總結(jié)

    時(shí)間:2017年08月28日星期一說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:代理模式 1-1 概念介紹 學(xué)習(xí)本課程基礎(chǔ) 面向?qū)ο蟮脑O(shè)計(jì)思維 了解多態(tài)的概念 了解反射機(jī)制 課程目標(biāo) 代理模式基本概念及分類...

    wow_worktile 評(píng)論0 收藏0
  • Java 代理模式與 AOP

    摘要:本文首發(fā)于作者最近在學(xué),研究了下和代理模式,寫點(diǎn)心得和大家分享下。所以下面來重點(diǎn)分析下代理模式。這里代理模式分為靜態(tài)代理和動(dòng)態(tài)代理兩種,我們分別來看下。代理模式,代理,意味著有一方代替另一方完成一件事。 本文首發(fā)于 https://jaychen.cc作者 jaychen 最近在學(xué) Spring,研究了下 AOP 和代理模式,寫點(diǎn)心得和大家分享下。 AOP 先說下AOP,AOP 全稱 ...

    jk_v1 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<