spring系列之 回呼函數的使用

來源:互聯網
上載者:User

spring使用了大量的回呼函數,如HibernateCallBack,開啟你的eclipse,ctrl+shift+t,再輸入*CallBack,你可以看到有多少地方在使用回呼函數,下面分析一下大牛們為什麼頻繁使用這個CallBack函數。
廢話少說,先來個例子說事兒。

package com.lixuehui.callbacktest;</p><p>public interface MySession {<br /> public Object createMyQuery();<br />}</p><p>package com.lixuehui.callbacktest;</p><p>public class MySessionImpl implements MySession{<br /> public Object createMyQuery(){<br /> return "Hello,World!";<br /> }<br />}</p><p>package com.lixuehui.callbacktest;</p><p>public interface MyHibernateCallBack {<br /> Object doInHibernate(MySession target);<br />}</p><p>package com.lixuehui.callbacktest;</p><p>abstract class MyTemplete{<br /> protected MySession createSession(){<br /> return new MySessionImpl();// 類比建立一個session<br /> }</p><p> protected Object execute(MyHibernateCallBack callback){<br /> MySession mySession = createSession(); // 類比建立一個session<br /> Object object = callback.doInHibernate(mySession);<br /> return object;<br /> }<br />}</p><p>class TempClass implements MyHibernateCallBack {<br /> public Object doInHibernate(MySession session) {<br /> return session.createMyQuery();<br /> }<br />}</p><p>public class Test extends MyTemplete{</p><p> public static void main(String[] args) {<br /> Object object = new Test().execute(new MyHibernateCallBack(){<br /> //這處new這個介面,建立一個匿名內部類,相當於new了一個實現MyHibernateCallBack介面的類,然後再將這個匿 名對象傳給execute方法。<br /> public Object doInHibernate(MySession session){<br /> return session.createMyQuery();<br /> }<br /> });<br /> System.out.println(object);<br /> }<br />}<br />//Test類相當於:<br />public class Test extends MyTemplete {</p><p> public static void main(String[] args){<br /> TempClass temp = new TempClass();<br /> Object object = new Test().execute(temp);<br /> System.out.println(object);<br /> }<br />}</p><p> 
 不過這麼寫靈活度比較低,doInHibernate裡的如果做另外的操作的話,就要重複修改TempClass的doInHibernate方法。
看到回調的好處了嗎?

我覺得這個回調的好處是:
通過建立匿名類,動態實現介面,並實現介面的方法,側重點在於介面,不在乎實現介面的類,故採用匿名類。
如果你遇到了側重點在於介面,而不在乎類實現的情況,就可以採取這種回調方式。

Oberser,swing的事件機制,以及java裡的自訂事件機制,頻繁用的都是回調.
包括java裡的main函數,也可以理解為回調
那想想,為什麼java *** 的時候就必須走main方法中呢,可見java ***的時候內部也是回調用的main,所以才跑到main方法裡.main方法扔給二次開發人員,隨意施展.

回調,回調,顧名思義:"你先實現吧,實現完了回頭我調你".

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.