91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用spring aop實現動態代理

發布時間:2020-10-19 11:58:13 來源:腳本之家 閱讀:144 作者:隨緣相識-(志同道合) 欄目:編程語言

下面由我來給大家展示用spring aop實現動態代理的例子(電腦打印)

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

先定義一個打印機的接口

package aop007_ComPrint;

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

然后定義兩個實現類,分別實現彩色打印和黑白打印

package aop007_ComPrint;

public class ColorPrint implements Print {

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

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

}
package aop007_ComPrint;

public class WhitePrint implements Print {

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

}

再定義一個代理類PrintHandler 實現動態代理打印功能

package aop007_ComPrint;

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

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

}

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

package aop007_ComPrint;

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

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

  public static void main(String[] args) {
    //第一步:創建目標實現類的實例
    Print cPrint = new ColorPrint();
    Print wPrint = new WhitePrint();
    
    //第二步:創建一個動態代理類(CEO 首席執行官)
    InvocationHandler cPrintHandler = new PrintHandler(cPrint);
    InvocationHandler wPrintHandler = new PrintHandler(wPrint);
    
    //第三步:創建動態代理(跟靜態代理一樣,申明的變量仍然是目標的接口)
    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(); [只有核心代碼] 運行后的區別
    System.out.println("------------------------------");
    wPrintProxy.WhitePrint();  //對比 wPrint.WhitePrint(); [只有核心代碼] 運行后的區別
  }

}

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

 利用spring aop實現動態代理

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清新县| 墨江| 内江市| 富平县| 韶关市| 辽宁省| 和静县| 阳谷县| 巴彦淖尔市| 博乐市| 南汇区| 铜川市| 桦甸市| 承德县| 浮梁县| 锦屏县| 海晏县| 祁门县| 通许县| 和硕县| 山丹县| 南木林县| 蒙自县| 宣汉县| 昌都县| 会理县| 清徐县| 宽城| 康定县| 平原县| 屏东市| 西和县| 长岛县| 连山| 龙海市| 永康市| 都兰县| 拜城县| 金湖县| 广西| 黄冈市|