亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

利用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

崇仁县| 海伦市| 柘城县| 大埔区| 墨脱县| 临沭县| 彭水| 荔浦县| 伊宁市| 琼海市| 宣化县| 洛阳市| 凉山| 滦南县| 漳平市| 翁源县| 察隅县| 青川县| 遵义县| 崇州市| 泸西县| 浏阳市| 富裕县| 巨鹿县| 昌吉市| 黄石市| 西丰县| 新巴尔虎右旗| 镇安县| 临澧县| 大庆市| 侯马市| 仁怀市| 藁城市| 甘洛县| 沽源县| 遂宁市| 汉沽区| 泰安市| 犍为县| 巴青县|