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

利用spring aop實現(xiàn)動態(tài)代理

 更新時間:2017年03月20日 14:18:10   作者:隨緣相識-(志同道合)  
這篇文章主要為大家詳細介紹了利用spring aop實現(xiàn)動態(tài)代理的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

下面由我來給大家展示用spring aop實現(xiàn)動態(tài)代理的例子(電腦打?。?/p>

下面就看一下具體的代碼:

先定義一個打印機的接口

package aop007_ComPrint;

public interface Print {
  
  public void ColorPrint();  //彩色打印
  public void WhitePrint();  //黑白打印
}

然后定義兩個實現(xiàn)類,分別實現(xiàn)彩色打印和黑白打印

package aop007_ComPrint;

public class ColorPrint implements Print {

  @Override
  public void ColorPrint() {
    System.out.println("[核心業(yè)務(wù)邏輯]我是一臺彩色打印機!");
    System.out.println("[核心業(yè)務(wù)邏輯]我主要負責(zé)打印彩色資料!");
  }

  @Override
  public void WhitePrint() {
    //System.out.println("[核心業(yè)務(wù)邏輯]我主要負責(zé)打印黑白資料!");
  }

}
package aop007_ComPrint;

public class WhitePrint implements Print {

  @Override
  public void WhitePrint() {
    System.out.println("[核心業(yè)務(wù)邏輯]我是一臺黑白打印機!");
    System.out.println("[核心業(yè)務(wù)邏輯]我主要負責(zé)打印黑白資料!");
  }
  
  @Override
  public void ColorPrint() {
    //System.out.println("[核心業(yè)務(wù)邏輯]我主要負責(zé)打印彩色資料!");
  }

}

再定義一個代理類PrintHandler 實現(xiàn)動態(tài)代理打印功能

package aop007_ComPrint;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Date;

public class PrintHandler implements InvocationHandler {
  //目標(biāo)類型不確定
  private Object target;
  public PrintHandler(Object target){
    this.target = target;
  }
  /*
   * return 返回的是原來目標(biāo)方法所返回的內(nèi)容 method 就是要執(zhí)行的方法
   */
  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    before();
    
    // 具體的業(yè)務(wù)邏輯代碼
    // Object returnPrintObj = targer.method  //用于解釋下面一行代碼
    Object returnPrintObj = method.invoke(target, args);
    
    after();
    return returnPrintObj;
  }
  
  private void before(){
    // 前置任務(wù)
    System.out.println(new Date());
    System.out.println("打印機");
    System.out.println("南方it學(xué)院提供!");
  }
  
  private void after(){
    // 后置任務(wù)
    System.out.println("學(xué)院打印機");
    System.out.println("請好好愛護,弄壞你可賠不起的哦?。?!");
  }

}

最后就定義一個測試類TestPrint 用于測試打印的功能

package aop007_ComPrint;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/*
 * 增加一個【動態(tài)代理類】,類似與明星的經(jīng)紀(jì)人
 * 把核心的業(yè)務(wù)邏輯的代碼 和 非核心的 分離
 * 把非核心的代碼交給經(jīng)紀(jì)人(proxy)去管理,
 * 注意:經(jīng)紀(jì)人和要明星,必須實現(xiàn)同一個接口
 */
public class TestPrint {

  public static void main(String[] args) {
    //第一步:創(chuàng)建目標(biāo)實現(xiàn)類的實例
    Print cPrint = new ColorPrint();
    Print wPrint = new WhitePrint();
    
    //第二步:創(chuàng)建一個動態(tài)代理類(CEO 首席執(zhí)行官)
    InvocationHandler cPrintHandler = new PrintHandler(cPrint);
    InvocationHandler wPrintHandler = new PrintHandler(wPrint);
    
    //第三步:創(chuàng)建動態(tài)代理(跟靜態(tài)代理一樣,申明的變量仍然是目標(biāo)的接口)
    Print cPrintProxy = (Print) Proxy.newProxyInstance(cPrint.getClass().getClassLoader(),
                              cPrint.getClass().getInterfaces(),
                              cPrintHandler);
    Print wPrintProxy = (Print) Proxy.newProxyInstance(wPrint.getClass().getClassLoader(),
                              wPrint.getClass().getInterfaces(),
                              wPrintHandler);
    
    cPrintProxy.ColorPrint();  //對比 cPrint.ColorPrint(); [只有核心代碼] 運行后的區(qū)別
    System.out.println("------------------------------");
    wPrintProxy.WhitePrint();  //對比 wPrint.WhitePrint(); [只有核心代碼] 運行后的區(qū)別
  }

}

到這里就完了,運行結(jié)果如下所示:

 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Hikari?數(shù)據(jù)庫連接池內(nèi)部源碼實現(xiàn)的小細節(jié)

    Hikari?數(shù)據(jù)庫連接池內(nèi)部源碼實現(xiàn)的小細節(jié)

    這篇文章主要介紹了Hikari?數(shù)據(jù)庫連接池內(nèi)部源碼實現(xiàn)的小細節(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 從零開始Java實現(xiàn)Parser?Combinator

    從零開始Java實現(xiàn)Parser?Combinator

    這篇文章主要為大家介紹了從零開始Java實現(xiàn)Parser?Combinator過程及原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • SpringCloud之LoadBalancer負載均衡服務(wù)調(diào)用過程

    SpringCloud之LoadBalancer負載均衡服務(wù)調(diào)用過程

    這篇文章主要介紹了SpringCloud之LoadBalancer負載均衡服務(wù)調(diào)用過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 解決maven父子工程install的時候排除某些子模塊,讓子模塊不install問題

    解決maven父子工程install的時候排除某些子模塊,讓子模塊不install問題

    在Maven父子工程中,如果希望某個子模塊不被安裝到本地倉庫,可以在該子模塊的`pom.xml`文件中添加以下配置: ```xml ... org.apache.maven.plugins maven-install-plugin 2.5.2 true
    2024-12-12
  • 二叉搜索樹實例練習(xí)

    二叉搜索樹實例練習(xí)

    一棵二叉查找樹是按二叉樹結(jié)構(gòu)來組織的。這樣的樹可以用鏈表結(jié)構(gòu)表示,其中每一個結(jié)點都是一個對象
    2012-11-11
  • springboot使用注解獲取yml配置的兩種方法

    springboot使用注解獲取yml配置的兩種方法

    本文主要介紹了springboot使用注解獲取yml配置的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • RocketMQ事務(wù)消息原理與使用詳解

    RocketMQ事務(wù)消息原理與使用詳解

    RocketMQ事務(wù)消息(Transactional Message)是指應(yīng)用本地事務(wù)和發(fā)送消息操作可以被定義到全局事務(wù)中,要么同時成功,要么同時失敗。RocketMQ的事務(wù)消息提供類似 X/Open XA 的分布式事務(wù)功能,通過事務(wù)消息能達到分布式事務(wù)的最終一致
    2023-02-02
  • Java?Collection?接口和常用方法綜合詳解

    Java?Collection?接口和常用方法綜合詳解

    Collection派生出三個子接口,Set代表不可重復(fù)的無序集合、List代表可重復(fù)的有序集合、Queue是java提供的隊列實現(xiàn),通過它們不斷的擴展出很多的集合類,接下來我們詳細介紹一下
    2021-11-11
  • Java實現(xiàn)文件變化監(jiān)控

    Java實現(xiàn)文件變化監(jiān)控

    這篇文章主要介紹了Java實現(xiàn)文件變化監(jiān)控的實現(xiàn)代碼,代碼附有注釋,分步驟介紹的非常詳細,非常不錯,具有參考借鑒價值,,需要的朋友可以參考下
    2016-08-08
  • 通過ibatis解決sql注入問題

    通過ibatis解決sql注入問題

    這篇文章主要介紹了通過ibatis解決sql注入問題,需要的朋友可以參考下
    2017-09-09

最新評論

孙吴县| 搜索| 吉安县| 大安市| 阜康市| 漳浦县| 侯马市| 平谷区| 交城县| 淮滨县| 丰城市| 拉萨市| 上犹县| 师宗县| 逊克县| 仁寿县| 定西市| 铅山县| 大同市| 博罗县| 门头沟区| 田阳县| 通榆县| 靖远县| 临朐县| 阜康市| 襄垣县| 岳西县| 新密市| 卢氏县| 九龙县| 云安县| 五家渠市| 安溪县| 大田县| 上饶县| 玉山县| 永吉县| 阿克| 桓仁| 南丹县|