一、什么是回调?
如上图所示
- client端调用server端
- 在特定条件满足时,又由server端反向调用client端
二、回调使用的场景
观察者模式
- 观察者实现回调接口
- 被观察者状态发生变更时触发回调,观察者们接收对应的状态变更消息
三、好处
- 调用方和被调用方分离,只通过接口进行交互
- 被调用方可以定义逻辑顺序,不管具体实现,只需要在约定的时机触发回调
- 至于接口方法逻辑如何被实现,由调用方自由进行控制
四、一个简单的例子
接口定义
/**
* @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接口,这些接口会在初始化阶段由框架进行调用,注入依赖。
七、new Thread(new RunnableImpl()).start()
根据前面的一些概念, new Thread(new RunnableImpl()).start()
也是一种回调。