如果Guice创建类a时抛出异常ProvisionException
包装原始异常。
有没有办法强制抛出原始异常呢?
例如:
@Inject
public myClass() {
throw new MySpecificException();
}
我知道,我可以捕获
ProvisionException
并调用getCause()
进行解包并转到MySpecificException
。但是,如果可能的话,我宁愿替代默认的Guice异常。 最佳答案
不,你不能。ProvisionException
除了包装一个Exception外,还有很多其他功能; Guice设置为可立即捕获许多异常,将它们汇总为一个异常,然后向您发送方便,有用的消息,以找出问题所在。
例如,在Guice源代码中,有许多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
。)关于java - 如何解开Guice ProvisionException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32241895/