引言:在學習Springboot啓動原理的時候,老是聽到一個'回調'這樣一個詞,在前端中常常聽到,可是在後端聽到,仍是有一種模棱兩可的感受,因而乎...html
1. 同步回調前端
* 場景:老師問學生問題,學生思考完畢回答老師。
* 流程:
* (1)老師調用學生接口的方法resolveQuestion,向學生提問;
* (2)學生解決完畢問題以後調用老師的回調方法tellAnswer;
* 這樣一套流程,構成了一種雙向調用的關係。
解釋:java
回調的作法是,調用方在調用時,將本身(this)傳遞給被調用方,這樣,當被調用方完成必定的邏輯後,能夠經過傳遞過來的this,回調調用方的方法。後端
Callback:回調接口ide
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:學生this
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:測試方法spa
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,後老師聽到了答案... // 這位同窗的回答的是:鞠婧禕最漂亮! }
參考:3d
https://www.cnblogs.com/aademeng/articles/11070081.html