亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

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

chavesgu / 749人閱讀

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

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

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

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

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

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

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

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

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("開(kāi)始log...");
    }
    private void after() {
        System.out.println("結(jié)束log");
    }
}

客戶(hù)端調(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é)果:

  

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/64007.html

相關(guān)文章

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

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

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

    摘要:代理模式概念代理模式分為兩種,一種是靜態(tài)代理模式,一種是動(dòng)態(tài)代理模式。面向切面的編程也是使用動(dòng)態(tài)代理模式來(lái)實(shí)現(xiàn)的。 1.代理模式概念 代理模式分為兩種,一種是靜態(tài)代理模式,一種是動(dòng)態(tài)代理模式。 靜態(tài)代理模式:在程序運(yùn)行之前需要寫(xiě)好代理類(lèi) 動(dòng)態(tài)代理模式:在程序運(yùn)行期間動(dòng)態(tài)生成代理類(lèi) 2.動(dòng)態(tài)代理的實(shí)現(xiàn) 動(dòng)態(tài)代理實(shí)現(xiàn)的步驟: (1)寫(xiě)一個(gè)代理類(lèi)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è)對(duì)象提供一個(gè)代理并由代理對(duì)象控制對(duì)原對(duì)象的引用代理模式其實(shí)取材于實(shí)際生活例如我們生活中常見(jiàn)的房屋租賃代理我們?cè)谧夥繒r(shí)一般不是直接和房 代理模式 基本概念 不論是靜態(tài)代理還是動(dòng)態(tài)代理, 其本質(zhì)都是代理模式的一種實(shí)現(xiàn), 那么什么是代理模式呢?代理模式, 即給某一個(gè)對(duì)象提供一個(gè)代理, ...

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

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

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

    時(shí)間:2017年08月28日星期一說(shuō)明:本文部分內(nèi)容均來(lá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) 代理模式基本概念及分類(lèi)...

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

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

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

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

0條評(píng)論

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