回調函數在Spring中的使用
?? 這是一種對單個方法的參數使用控制反轉,把控制權和差錯處理交給框架來處理。嚴格的說,這是一種Strategy模式的特例,他們的區別就在于接口的復雜度不同。
?? 在Spring的JdbcTemplate中就使用了這種模式。JdbcTemplate實現了query()方法,參數是SQL字符串,和一個實現了回調接口的,將在讀取resultSet每行時被調用。

2



3

4

? query()方法封裝了對JDBC底層API的調用。




































?? 在上面的例子中,JdbcSqlException繼承了java.lang.RuntimeException,也就是說調用者可以選擇去捕獲它,但是這不是必須的。假如實現了回調接口的子類里的方法出錯,而且不是RuntimeException的子類,也就是必須捕獲的異常,但是query()方法中在邏輯上是沒有辦法捕獲它的。所以Rod_Johnson把接口定義成JdbcTemplate的inner interface。這就可以JdbcTemplate就可以捕獲它。
?? 回調方法也是框架的一種基本方法,比如java.io.File類中的listFiles(FilenameFilter filter),FilenameFilter就是一個接口,我們實現這個接口中的方法accept(File dir, String name) ,這就是一個典型的回調方法。
?? 觀察者模式的使用符合開閉原則,并且分離了關注點。這種對模塊修改開發,影響關閉的原則促進了AOP面向方面編程的發展。Spring中的AOP可能就是這種思想的實現,個人猜測而已。????
??? 把方法的參數放在一個類中,這樣以后要增加參數的話,不用修改方法簽名,感覺很干凈,唯一可能的缺點是可能對性能有所下降,不過很小。如果沒有用EJB的話,應該差不多。
?? 對異常的處理,分為checked和unchecked異常,checked異常是繼承java.lang.Exception的。Unchecked異常繼承java.lang.RuntimeException。Rod_Johnson主張在對出現異常后,程序不能處理,只能給予沒用的提示時用RuntimeException,因為RuntimeException容器會自動處理。關于異常的詳細說明,我也沒看明白,希望那位大蝦能指點指點。
備注:本文主要內容來源于Rod_Johnson的大作,強烈建議看原版!
posted on 2006-03-30 21:57 逝去的年華 閱讀(1466) 評論(0) 編輯 收藏 所屬分類: java