[英]How can I unwrap Guice ProvisionException?
如果在Guice創建類時拋出異常,則ProvisionException
包裝原始異常。
有沒有辦法強制拋出原始異常呢?
例如:
@Inject
public myClass() {
throw new MySpecificException();
}
我知道,我可以捕獲ProvisionException
並調用getCause()
進行解包並轉到MySpecificException
。 但是,如果可能的話,我寧願替代默認的Guice異常。
ProvisionException
除了包裝一個Exception外,還可以做很多其他事情。 Guice設置為可立即捕獲許多異常,將它們匯總為一個異常,然后向您發送方便,有用的消息,以找出問題所在。
例如,在Guice源代碼中,有很多這樣的代碼 :
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
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.