我想知道如果我想捕获错误,我是否总是必须使用使代码困惑很多的 try-catch-error block 。
或者我能以某种方式定义一个全局错误捕捉器吗? 特别是关于 Java EE Webapps。
对于每个未处理的 ex,我想记录到一个特定的文件,并向用户显示一个一般错误页面。
我想我可以通过方面来实现。但是为了在 @AfterThrowing
上捕捉方面,我也必须引入 try-catch block 。并且由于没有用于支持门面的中心类,我将不得不用 trycatch 包围每个支持方法。
然后方面会接受它们,但我需要在没有显式抛出异常的情况下捕获一些东西。
我怎么能那样呢?
最佳答案
您正在寻找declare soft
结构。这会将给定的异常包装在 SoftException
(AspectJ 特定的 RuntimeException)中,这样就不需要显式处理它。然后,您可以使用一些 AfterThrowing
建议来处理所有这些异常。
declare soft
仅存在于代码样式 AspectJ 中(即 - 没有注释)。因此,您将需要使用 AspectJ 编译器编译您的代码,但如果您愿意,您仍然可以为此使用加载时织入。
看这里: http://www.eclipse.org/aspectj/doc/released/progguide/quick-other.html
这里: http://www.eclipse.org/aspectj/doc/released/adk15notebook/declare-soft.html
这是一个代码片段,展示了它是如何完成的:
aspect ErrorHandler {
declare soft : Exception : within(*);
after() throwing(Exception e) : handler(e) {
// do something...
}
}
这将通过自定义错误处理程序路由系统中的所有 异常。而且您不需要明确地捕获或抛出它们。
它简单而强大。不过,也许太强大了。我建议细化并更精确地明确哪些异常应该被软化,哪些需要被告知,但这是基本的想法。
关于java - 总是 try-catch-finally 异常?中央错误管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9610890/