- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个不同的方面类,方面类 1 将处理所有 Controller 文件中发生的任何异常,而另一个方面类 2 将处理仅在一个特定 Controller 文件中发生的少数特定异常。我已经指定了优先顺序,使方面类 2 的优先级高于方面 1。方面类 1 如下
@Aspect
@Order(1)
public class TrackOperations {
@Around("apiPointcut()")
public Object handleException(ProceedingJoinPoint pjp) throws Throwable {
try {
return pjp.proceed();
} catch (Exception e) {
LOGGER.error("Caught exception: ", e);
StringBuilder sb = getExceptionTrace(e);
StringWriter errorStackTrace = new StringWriter();
e.printStackTrace(new PrintWriter(errorStackTrace, true));
response.addError(error);
return new ResponseEntity<String>(JsonUtil.toJson(response), HttpStatus.INTERNAL_SERVER_ERROR);
}}
方面类别 2
@Aspect
@Order(0)
public class TrackServiceOperations {
@Around("apiPointcut()")
public Object handleServerException(
try {
return pjp.proceed();
} catch (HttpClientErrorException | HttpServerErrorException e) {
response = (Response<String>) ContextUtil.get(key);
response.addError(new Error("Assessment Service Status Code: " + e.getStatusCode(), ErrorConstants.REQUEST_FAILED));
LOGGER.error("Recieved" + e.getStatusCode() + " status from Assessment Service");
return new ResponseEntity<String>(JsonUtil.toJson(response), HttpStatus.OK);
}
}}
在应用程序 xml 中提到了相同的内容
<bean id="TrackServiceOperations" class="in.foo.foo.TrackServiceOperations" factory-method="aspectOf" />
<bean id="TrackOperations" class="in.foo.foo.TrackOperations" factory-method="aspectOf" />
但是当 Controller 文件抛出所需的异常时,方面类 1 最终会处理异常,而不是方面类 2。当我禁用方面类 1 时,事情会按预期正常工作,但是当我同时使用 @around 切入点时,优先顺序似乎不起作用。我在这里遗漏了什么吗?
最佳答案
方面类 1 正在处理 HttpClientErrorException 和 HttpServerErrorException 派生自的通用异常。因此,当您希望在方面类 2 中处理异常时,它们已经被方面类 1 的处理程序覆盖。
要解决此问题,您可以检查方面类 1 处理程序中的异常类型,并重新抛出您想要在方面类 2 中处理的那些特殊异常。(这感觉像是一个拼凑,因为它现在有方面 1 了解方面的内容2).
public Object handleException(ProceedingJoinPoint pjp) throws Throwable {
try {
return pjp.proceed();
} catch (Exception e) {
(if e instance of org.springframework.web.client.HttpStatusCodeException || e instanceof org.springframework.web.client. HttpServerErrorException) throw e;
LOGGER.error("Caught exception: ", e);
StringBuilder sb = getExceptionTrace(e);
StringWriter errorStackTrace = new StringWriter();
e.printStackTrace(new PrintWriter(errorStackTrace, true));
response.addError(error);
return new ResponseEntity<String>(JsonUtil.toJson(response), HttpStatus.INTERNAL_SERVER_ERROR);
}}
关于java - 同一连接点上有多个 @Around AspectJ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34144145/
这是关于风格的问题。这些模式中的哪一种是处理错误的更好方法? 模式1: Try { function1(); } catch (err) { console.log(‘function1()
在我的应用程序中,在某些情况下我需要一些模式行为,即只允许用户与 UI 的特定元素(例如组框中的所有控件)进行交互。我不想使用模式对话框,因此我尝试找到一种方法来“淡出”除应保持事件状态的控件之外的所
我需要为几个“周围”建议执行一些通用代码。所以,我将公共(public)代码移到了一个函数中。但我遇到的问题是,proceed() 在这个通用函数中不起作用。请看下面的代码。 aspect MyAsp
有时我的 API 会抛出异常,服务器无法处理我的请求。我决定创建 AOP 方面,它将重新调用 API 调用。例如,5 次之后,如果仍然不起作用,则抛出异常。 请看我的 AOP 类。这不是一个完整的 b
我想在栅格的每个像元周围都有黑线。下面是示例数据。 我的意思是,而不是这个框架/无边界单元格 我想要这个(带边框的单元格) 我怎样才能做到这一点? library(raster) require(
更新为使用附加信息重新表述问题 我们有两个注解: CustomLogging PollableStreamListener 两者都是使用 Spring AOP 的方面实现的。CustomLogging
我有两个不同的方面类,方面类 1 将处理所有 Controller 文件中发生的任何异常,而另一个方面类 2 将处理仅在一个特定 Controller 文件中发生的少数特定异常。我已经指定了优先顺序,
我有一个数组: MDP= [[0.705,.655,0.614,0.388],[0.762,None,0.660,-1],[0.812,.868,0.918,+1]] 如何在上面的数组上应用 np.a
我从 Integer Overflow Wiki 中读到了以下行: while unsigned integer overflow causes the number to be reduced mo
情况如下:我的应用程序扩展了一个框架。所以我没有 main() 或我声明的任何其他入口点(我覆盖了该框架提供的方法,它安排了其他一切)。这个框架可以变得安全;安全性建立在 apache mina 之上
我目前正在为使用 Spring 和 AspectJ 的应用程序中的类编写 JUnit 单元测试。被测类有几个公共(public)方法,由方面类中的环绕建议方法建议。 Aspect 有几个注入(inje
我的想法是使用AspectJ 捕获带注释的方法中的异常,如果抛出任何异常,带注释的方法应该尝试再次运行。我大部分时间都遵循了本教程 ( http://zoftware.blogspot.cz/2008
我的 LoggingAspect 类中有下面的代码,我希望它可以为我的方法运行 gov.ssa.rome.service.impl.save()gov.ssa.rome.dao.impl.save()
我只是关注@Around example provided by spring ,并且有一个关于将参数传递给底层方法的行为的快速问题( their explanation wasn't clear t
我尝试使用 Java 8 Lambda 实现一些 GoF 设计模式。在此练习中,我遇到了围绕方法执行 (EAM) 模式和模板模式。两者似乎有惊人的相似之处。 我读到,EAM 更像是一种没有继承的习惯用
我一直在寻找这个问题的答案,但似乎找不到任何答案,如果已经有答案,我深表歉意。 我期待一个对象,让我们这样说: { name: 'myname', items: [ {
在我当前的 Android 应用程序中,我正在研究 @AspectJ 的使用 我正在尝试“捕获”对签名类似于以下方法的所有执行:- public void onMethodClicked(com.ex
抱歉,如果标题令人困惑。 假设我有一个 episode_id 为 0 到 20 的视频播放列表。 当前播放的剧集是 episode_id 4。 我想检索“更多视频”列表以提示用户继续观看,以及要观看的
我想针对 Dojo 商店的 put() 和 add() 运行一些特定代码。我遇到的问题是,对于 JSON REST 存储,在 JsonRest.js add() 中只是一个调用 put() 的函数:
Closed. This question needs to be more focused。它当前不接受答案。
我是一名优秀的程序员,十分优秀!