一、什么是回调?

如上图所示
- client 端调用 server 端
- 在特定条件满足时,又由 server 端反向调用 client 端
25.07.08 Tue
补:前几天看电影迷失东京,斯嘉丽和她在美国的朋友打电话结束的时候说“call me back”,我想着这不也是回调嘛,你调用的模块,在某个条件来临时会来调用你。
二、回调使用的场景
观察者模式
- 观察者实现回调接口
- 被观察者状态发生变更时触发回调,观察者们接收对应的状态变更消息
三、好处
- 调用方和被调用方分离,只通过接口进行交互
- 被调用方可以定义逻辑顺序,不管具体实现,只需要在约定的时机触发回调
- 至于接口方法逻辑如何被实现,由调用方自由进行控制
四、代码例子
接口定义
/**
* @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();
}
}
运行结果

五、使用步骤
- 接口定义:接口中定义回调的方法
- 实现接口:client 实现接口,并且实现回调方法
- 传递对象:将 client 传递给 server
- 触发回调:server 在适当时机去调用回调方法,执行回调逻辑
六、在 spring 中使用的回调
回调是 IoC 的具体实现手段之一,强调“框架调用用户代码”。
例如开发者实现框架的 Aware 接口,这些自定义的实现会在容器初始化阶段由框架进行调用,向开发者的 bean 中注入对应依赖 (例如 ApplictionContext/BeanFactory)。
七、new Thread(new RunnableImpl()).start()
根据前面的一些概念,new Thread(new RunnableImpl()).start()
也是一种回调。
八、设置空调在早上 7:30 准时关闭
早上要关空调,但是不想从床上起来到桌子上拿遥控器去关,看到遥控器上有一个按钮【定时关闭】 我就设置在 7:30 定时关闭。
这个问了下 deepseek,并不是回调,算是时间驱动的定时任务了。