引言:在学习Springboot启动原理的时候,总是听到一个'回调'这样一个词,在前端中经常听到,但是在后端听到,还是有一种模棱两可的感觉,于是乎...
1. 同步回调
* 场景:老师问学生问题,学生思考完毕回答老师。
* 流程:
* (1)老师调用学生接口的方法resolveQuestion,向学生提问;
* (2)学生解决完毕问题之后调用老师的回调方法tellAnswer;
* 这样一套流程,构成了一种双向调用的关系。
解释:
回调的做法是,调用方在调用时,将自己(this)传递给被调用方,这样,当被调用方完成一定的逻辑后,可以通过传递过来的this,回调调用方的方法。
Callback:回调接口
package cn.test.call_back; /** * 参考:https://www.cnblogs.com/aademeng/articles/11070081.html * * 场景:老师问学生问题,学生思考完毕回答老师。 * 流程: * (1)老师调用学生接口的方法resolveQuestion,向学生提问; * (2)学生解决完毕问题之后调用老师的回调方法tellAnswer; * 这样一套流程,构成了一种双向调用的关系。 * * 回调接口:同步回调 */ public interface Callback { /** * 回答问题 * @param answer */ public void tellAnswer(String answer); }
Teacher:老师
package cn.test.call_back; /** * @author zls * @date 2019/8/20 */ public class Teacher implements Callback { private Student student; public Teacher(Student student) { this.student = student; } /** * 提出问题 */ public void askQuestion() { System.out.println("老师提出问题:谁最漂亮?"); student.resolveQuestion(this); } @Override public void tellAnswer(String answer) { System.out.println("这位同学的回答的是:" + answer + "最漂亮!"); } }
Student:学生接口
package cn.test.call_back; /** * 学生接口 * @author zls * @date 2019/8/20 */ public interface Student { /** * 解决问题 * @param callback */ public void resolveQuestion(Callback callback); }
Ricky:学生
package cn.test.call_back; import javax.lang.model.SourceVersion; /** * @author zls * @date 2019/8/20 */ public class Ricky implements Student { private String name = "诗云"; @Override public void resolveQuestion(Callback callback) { // 模拟解决问题 try { System.out.println(this.name + "思考了5s..."); Thread.sleep(5000); System.out.println("回答到:鞠婧祎最漂亮"); System.out.println("声音在空气中传播了3s,后老师听到了答案..."); Thread.sleep(3000); } catch (InterruptedException e) { } // 回调,告诉老师作业写了多久 callback.tellAnswer("鞠婧祎"); } }
CallbackTest:测试方法
package cn.test.call_back; /** * @author zls * @date 2019/8/20 */ public class CallbackTest { public static void main(String[] args) { Student student = new Ricky(); Teacher teacher = new Teacher(student); teacher.askQuestion(); } /*流程结果打印*/ // 老师提出问题:谁最漂亮? // 诗云思考了5s... // 回答到:鞠婧祎最漂亮 // 声音在空气中传播了3s,后老师听到了答案... // 这位同学的回答的是:鞠婧祎最漂亮! }
参考:
https://www.cnblogs.com/aademeng/articles/11070081.html