首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 異步回調機制實戰:介面回調、觀察者模式與 Filter/Interceptor 差異

     編輯:Java 相關知識

回調三種調用方式

方式特徵例子
同步調用阻塞等待結果普通方法呼叫
回調雙向,被調用者主動通知調用者介面回調、事件監聽
異步調用非阻塞,透過訊息/執行緒通知Future, CompletableFuture, 消息隊列

完整實作:客戶端-伺服端異步回調

1. 回調介面

public interface CSCallBack {
    void process(String status);
}

2. 客戶端 (實作回調)

public class Client implements CSCallBack {
    private Server server;
    
    public Client(Server server) { this.server = server; }
    
    public void sendMsg(final String msg) {
        System.out.println("客戶端發送: " + msg);
        new Thread(() -> server.getClientMsg(this, msg)).start();  // 異步執行
        System.out.println("客戶端異步發送成功");
    }
    
    @Override
    public void process(String status) {
        System.out.println("客戶端收到回調: " + status);
    }
}

3. 伺服端 (觸發回調)

public class Server {
    public void getClientMsg(CSCallBack callback, String msg) {
        System.out.println("伺服端收到: " + msg);
        try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); }
        System.out.println("伺服端處理完成,回調 200");
        callback.process("200");  // 執行回調
    }
}

4. 執行結果

客戶端發送: Server,Hello~
客戶端異步發送成功
伺服端收到: Server,Hello~
(等待 5 秒)
伺服端處理完成,回調 200
客戶端收到回調: 200

核心設計要點

  1. 介面作為方法參數,實際傳入實作類實例 (多型)
  2. 異步執行用 new Thread() 或線程池
  3. 回調方法在伺服端執行緒中執行 (注意執行緒安全)

應用場景

  • Windows 訊息機制 (WndProc)
  • 微信/支付寶異步通知 (HTTP 回調)
  • Servlet Filter (容器管理回調鏈)
  • JDBC Statement.setFetchSize / ResultSet 回調

Filter vs Interceptor

特性FilterInterceptor
基礎機制回調 (容器呼叫 doFilter)反射/動態代理 (AOP)
依賴容器是 (Servlet 規範)否 (Spring 管理)
攔截範圍所有請求特定 Bean 方法
執行順序web.xml 定義@Order / 優先級

觀察者模式 vs 介面回調

  • 觀察者模式:一對多,主題狀態變更通知所有觀察者,是回調的一種具體實現形式
  • 介面回調:一對一/一對少,通用機制,是設計原理

心得總結

  1. 機制 = 原理 (回調)
  2. 模式 = 體現 (觀察者)
  3. 記住典型場景 (Filter, 異步通知)
  4. 深入理解底層原理 (多型、執行緒、記憶體可見性)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved