java - 总是 try-catch-finally 异常?中央错误管理?

标签 java spring aspectj

我想知道如果我想捕获错误,我是否总是必须使用使代码困惑很多的 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/

相关文章:

java - Spring-MVC:JSP <form action> View 将一系列值发送到 Controller ,而不是单击按钮的一个值

java - 在 AspectJ 中获取泛型方法调用的返回类型

java - @AfterClass 在 cucumber 脚本中不起作用

java - 同步语句——创建对象来提供锁,以便 c1 的更新不会与 c2 的更新交错

java - 未找到父键 - Spring 事务管理

java - 访问@RequestMapping映射的参数进行跟踪

java - 如何为提示中的字符串设置颜色?

java - Spring Security如何检索用户名

java - 如何在 Java 中将变量发送到 Aspect?

java - 如何在 Guice 中定义 AOP 切入点