我想知道如果我想捕获错误,我是否总是必须使用try-catch-error块来使代码混乱很多.
或者我可以以某种方式定义全局错误捕获器?
特别是关于Java EE Webapps.
对于每个未处理的ex,我想登录到特定文件,并向用户显示一般错误页面.
我以为我可以用方面实现这一点.但是对于赶上@AfterThrowing的方面,我也必须引入try-catch块.由于没有背景外观的中心级别,我将不得不用trycatches包围每个支持方法.
然后方面将采取它们,但我需要一些东西,没有明确的抛出异常.
我怎么能这样?
解决方法:
您正在寻找声明软构造.这将在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...
}
}
这将通过您的自定义错误处理程序路由系统中的所有异常.而且您不需要明确地捕获或抛出它们.
它简单而有力.但也许太强大了.我建议改进并更准确地确定哪些异常应该被软化以及需要建议哪些异常,但这是基本的想法.