回调Callback

2025/04/10

一、什么是回调?

如上图所示

  1. client端调用server端
  2. 在特定条件满足时,又由server端反向调用client端

二、回调使用的场景

观察者模式

  1. 观察者实现回调接口
  2. 被观察者状态发生变更时触发回调,观察者们接收对应的状态变更消息

三、好处

  1. 调用方和被调用方分离,只通过接口进行交互
  2. 被调用方可以定义逻辑顺序,不管具体实现,只需要在约定的时机触发回调
  3. 至于接口方法逻辑如何被实现,由调用方自由进行控制

四、一个简单的例子

接口定义

/**
 * @description 回调接口
 */
public interface Callback {
    void callbackMethod(String message);
}

调用方实现接口

/**
 * @description 调用方
 */
public class Client implements Callback {
    @Override
    public void callbackMethod(String message) {
        System.out.println("client执行回调方法: " + message);
    }
}

传递对象、触发回调

/**
 * @description 被调用方
 */
public class Server {
    private Callback callback;

    /**
     * 注册callback
     * @param callback
     */
    public void registCallback(Callback callback) {
        this.callback = callback;
    }

    /**
     * 调用callback
     */
    public void triggerCallback() {
        System.out.println("server触发callback!");
        if (callback != null) {
            callback.callbackMethod("事件已经触发到了!");
        }
    }
}

验证执行

/**
 * @description 验证
 */
public class CallbackDemo {
    public static void main(String[] args) {
        Server server = new Server();
        Callback client = new Client();
        server.registCallback(client); // 直接传递接口

        server.triggerCallback();
    }
}

运行结果

五、使用步骤

  1. 接口定义:接口中定义回调的方法
  2. 实现接口:client实现接口,并且实现回调方法
  3. 传递对象:将 client 传递给 server
  4. 触发回调:server 在适当时机去调用回调方法,执行回调逻辑

六、在spring中使用的回调

回调是 IoC 的具体实现手段之一,强调“框架调用用户代码”。

例如开发者实现框架的Aware接口,这些接口会在初始化阶段由框架进行调用,注入依赖。

七、new Thread(new RunnableImpl()).start()

根据前面的一些概念, new Thread(new RunnableImpl()).start()也是一种回调。