?
This document uses PHP Chinese website manual Release
Spring提供了一種方便的方法,把特定于某種技術(shù)的異常,如SQLException
,
轉(zhuǎn)化為自己的異常,這種異常屬于以DataAccessException
為根的異常層次。這些異常封裝了原始異常對象,這樣就不會有丟失任何錯誤信息的風(fēng)險。
除了對JDBC異常的封裝,Spring也對Hibernate異常進(jìn)行了封裝,把它們從一種專有的checked異常 (Hibernate3.0以前的版本),轉(zhuǎn)化為一系列抽象的運行時異常。對JDO也是這樣。 它可以讓你輕松處理大多數(shù)持久化異常(這些異常大多是不可恢復(fù)的,而且只出現(xiàn)在特定 的層次),而不再需要在DAO中編寫討厭的樣板式的catch/throw代碼塊和異常聲明。你仍然可以在需要 的地方捕獲并處理這些異常。就像我們上面提到的,JDBC異常(包括特定于某種數(shù)據(jù)庫 方言的異常)也可以被轉(zhuǎn)化為同樣的異常層次,這意味著你可以在一致的編程模型下,通 過JDBC來執(zhí)行某些操作。
上述情況適用于Spring支持的各種ORM框架的模板類。如果使用基于攔截器的類,你在應(yīng)用中
就得自己小心處理HibernateException
、
JDOException
等,最好是委托給
SessionFactoryUtils
的
convertHibernateAccessException
、
convertJdoAccessException
等方法。這些方法可以把相應(yīng)的異常轉(zhuǎn)
化為與org.springframework.dao
中定義的異常層次相兼容的異常。
其中JDOException
屬unchecked異常,它們也可以被簡單地拋出,
但這樣做在異常處理方面犧牲了通用的DAO抽象。
下圖展示了Spring提供的異常層次。
(注意圖上所包含的異常類只是整個龐大的DataAccessException
異常層次中的一部分。)