不,你不能。
ProvisionException
確實比包裹一個異常多很多; Guice設置爲立即捕獲許多異常,將它們一起放入一個Exception中,然後發送方便有用的消息給您,以便找出錯誤。
例如,在吉斯源代碼中有很多code like this:
try {
result = callable.call();
// Make sure we don't return the provisioned object if there were any errors
// injecting its field/method dependencies.
errors.throwIfNewErrors(numErrorsBefore);
} catch(ErrorsException ee) {
exceptionDuringProvision = ee;
throw new ProvisionException(errors.merge(ee.getErrors()).getMessages())
}
錯誤處理系統是如此深入地集成,你不會是能夠提取出來;老實說,你爲什麼想要?這樣做的關鍵就是讓你很容易找出問題。如果你得到ProvisionException
,這意味着你的代碼做錯了事情,需要更改; ;這不是您可以從中恢復並返回正常操作的那種事情。
在我的生產體系,我趕在不同的地方很多例外,進行處理,記錄它們並嘗試恢復。但是,ProvisionException
不是其中之一;如果我的系統拋出它,我想讓整個織物崩潰,所以我可以立即找出它並修復它。 (當然,在我部署一個新版本的時候,它已經過了全面的測試,所以我知道,至少在出現問題時它不會是ProvisionException
)。
構造函數可以拋出由於瞬態錯誤錯誤,應該能夠在這些情況下恢復,而不需要重新啓動整個應用程序。 Guice的設計在這個問題上真的很自以爲是,這使得它更難使用。 –