最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 靜態(tài)代理 動(dòng)態(tài)代理深入學(xué)習(xí)

 更新時(shí)間:2012年11月26日 10:03:03   作者:  
代理模式是常用的java設(shè)計(jì)模式,特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過(guò)濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息等,需要的朋友可以參考下

一、代理模式
代理模式是常用的java設(shè)計(jì)模式,特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過(guò)濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息等。
代理類與委托類之間通常會(huì)存在關(guān)聯(lián)關(guān)系,一個(gè)代理類的對(duì)象與一個(gè)委托類的對(duì)象關(guān)聯(lián),代理類的對(duì)象本身并不真正實(shí)現(xiàn)服務(wù),而是通過(guò)調(diào)用委托類的對(duì)象的相關(guān)方法,來(lái)提供特定的服務(wù)。
按照代理的創(chuàng)建時(shí)期,代理類可以分為兩種:
靜態(tài)代理:由程序員創(chuàng)建或特定工具自動(dòng)生成源代碼再對(duì)其編譯。在程序運(yùn)行前代理類的.class文件就已經(jīng)存在了。
動(dòng)態(tài)代理:在程序運(yùn)行時(shí)運(yùn)用反射機(jī)制動(dòng)態(tài)創(chuàng)建而成。
二、單個(gè)靜態(tài)代理

復(fù)制代碼 代碼如下:

public interface CountDao
{
// 查看賬戶方法
public void queryCount();
}
public class CountDaoImpl implements CountDao
{
public void queryCount()
{
System.out.println("查看賬戶方法...");
}
}
public class CountTrancProxy implements CountDao
{
private CountDao countDao;
public CountProxy(CountDao countDao)
{
this.countDao = countDao;
}
@Override
public void queryCount()
{
System.out.println("tranc start");
countDao.queryCount();
System.out.println("tranc end");
}
}
public class TestCount
{
public static void main(String[] args)
{
CountTrancProxy countProxy = new CountTrancProxy(new CountDaoImpl());
countProxy.updateCount();
}
}

tranc start
查看賬戶方法...
tranc end
三、多個(gè)靜態(tài)代理
在上面代碼的基礎(chǔ)上新增了
復(fù)制代碼 代碼如下:

public class CountLogProxy implements CountDao
{
private CountDao countDao;
public CountLogProxy(CountDao countDao)
{
this.countDao = countDao;
}
@Override
public void queryCount()
{
System.out.println("Log start");
countDao.queryCount();
System.out.println("Log end");
}
}

調(diào)用代碼就變成了
復(fù)制代碼 代碼如下:

// 體現(xiàn)了聚合的思想,代理之間的組合
public static void main(String[] args)
{
CountTrancProxy trancProxy = new CountTrancProxy(new CountDaoImpl());
CountLogProxy logPro = new CountLogProxy(trancProxy);
logPro.queryCount();
}

Log start
事務(wù)處理之前
查看賬戶方法...
事務(wù)處理之后
Log end
四、總結(jié)
其實(shí)可以用代理類可以用繼承或?qū)崿F(xiàn)接口兩種方式達(dá)到代理的效果,但是當(dāng)多個(gè)代理類需要相互組合的時(shí)候,繼承就不靈活了,需要不斷重寫(xiě)代理類,而實(shí)現(xiàn)接口的方式就十分容易通過(guò)的聚合實(shí)現(xiàn)代理類之間的組合。

相關(guān)文章

  • SpringBoot與docker的結(jié)合的示例

    SpringBoot與docker的結(jié)合的示例

    本篇文章主要介紹了SpringBoot與docker的結(jié)合的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 如何使用IDEA2022.1?創(chuàng)建Spring?Boot項(xiàng)目

    如何使用IDEA2022.1?創(chuàng)建Spring?Boot項(xiàng)目

    這篇文章主要介紹了如何使用IDEA2022.1?創(chuàng)建Spring?Boot項(xiàng)目,大家在使用idea開(kāi)發(fā)工具時(shí)發(fā)現(xiàn)給以往的版本略微的不同,細(xì)心的小編在此記錄下,需要的朋友可以參考下
    2022-08-08
  • Java基于Socket的文件傳輸實(shí)現(xiàn)方法

    Java基于Socket的文件傳輸實(shí)現(xiàn)方法

    這篇文章主要介紹了Java基于Socket的文件傳輸實(shí)現(xiàn)方法,結(jié)合實(shí)例分析了Java使用Socket實(shí)現(xiàn)文件傳輸?shù)慕⑦B接、發(fā)送與接收消息、文件傳輸?shù)认嚓P(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • 較詳細(xì)的JNI簡(jiǎn)介

    較詳細(xì)的JNI簡(jiǎn)介

    JNI是本地語(yǔ)言編程接口。它允許運(yùn)行在JVM中的Java代碼和用C、C++或匯編寫(xiě)的本地代碼相互操作。下面通過(guò)本文給大家分享JNI簡(jiǎn)介,感興趣的朋友一起看看吧
    2017-10-10
  • 淺談Spring Cloud中的API網(wǎng)關(guān)服務(wù)Zuul

    淺談Spring Cloud中的API網(wǎng)關(guān)服務(wù)Zuul

    這篇文章主要介紹了淺談Spring Cloud中的API網(wǎng)關(guān)服務(wù)Zuul,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 70行Java代碼實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò)算法分享

    70行Java代碼實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò)算法分享

    這篇文章主要介紹了70行Java代碼實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò)算法分享,涉及神經(jīng)網(wǎng)絡(luò)的計(jì)算過(guò)程,神經(jīng)網(wǎng)絡(luò)的算法程序?qū)崿F(xiàn),多層神經(jīng)網(wǎng)絡(luò)完整程序?qū)崿F(xiàn)等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • 如何用Java Stream寫(xiě)出既高雅又裝*的代碼

    如何用Java Stream寫(xiě)出既高雅又裝*的代碼

    如何讓同事看不懂你寫(xiě)的代碼,然后覺(jué)得你非常牛逼,這里用到了stream()與Lambda,需要有點(diǎn)基礎(chǔ),沒(méi)基礎(chǔ)你炫個(gè)🔨優(yōu)雅永不過(guò)時(shí)~ 看下面文章時(shí)記得穿燕尾服,拿高腳杯
    2021-08-08
  • Java的jmap命令的具體使用

    Java的jmap命令的具體使用

    jmap是JDK提供的一個(gè)可以生成Java虛擬機(jī)的堆轉(zhuǎn)儲(chǔ)快照dump文件的命令行工具,本文主要介紹了Java的jmap命令的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java利用字符流輕松處理文本數(shù)據(jù)

    Java利用字符流輕松處理文本數(shù)據(jù)

    在Java中,文本數(shù)據(jù)是經(jīng)常處理的一種數(shù)據(jù)類型,而字符流就是用來(lái)處理文本數(shù)據(jù)的一種流,下面就為大家介紹一下Java字符流的基本概念、常用類和方法,以及如何使用字符流來(lái)讀寫(xiě)文件吧
    2023-09-09
  • Java基于正則表達(dá)式獲取指定HTML標(biāo)簽指定屬性值的方法

    Java基于正則表達(dá)式獲取指定HTML標(biāo)簽指定屬性值的方法

    這篇文章主要介紹了Java基于正則表達(dá)式獲取指定HTML標(biāo)簽指定屬性值的方法,涉及java基于正則的HTML元素匹配相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01

最新評(píng)論

南漳县| 会同县| 和龙市| 成武县| 屯昌县| 巢湖市| 大厂| 泽州县| 六盘水市| 固原市| 徐州市| 南澳县| 拉萨市| 焉耆| 包头市| 延吉市| 曲周县| 明光市| 稻城县| 三门县| 三亚市| 绍兴县| 长兴县| 大悟县| 小金县| 丰镇市| 遂昌县| 双辽市| 涿州市| 简阳市| 琼中| 西乌| 泾源县| 尼玛县| 宣武区| 梁山县| 阿城市| 双城市| 伊宁县| 威信县| 富顺县|