【问题标题】:Spring AOP: How to determine if method threw an exception using @After?Spring AOP:如何使用@After 判断方法是否抛出异常?
【发布时间】:2018-02-13 21:05:41
【问题描述】:

春天docs说:

必须准备好后通知处理正常和异常 返回条件。

@After("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")
public void doReleaseLock() {
    // ...
}

我很想知道dataAccessOperation 是正常完成还是异常完成。不幸的是,上面的代码 sn-p 正在运行中以获取有史以来最无用的文档。我知道我可以分别使用AfterReturningAfterThrowing,甚至可以使用Around,但这不是重点。由于After 存在,我应该可以使用它。

【问题讨论】:

    标签: spring spring-aop


    【解决方案1】:

    文档想说的是,无论是否引发异常,您的 @After 建议都应该做有效的事情。这并不意味着您可以从建议中确定它。如果应该做不同的事情,

    • 如果不涉及控制流并且您的建议不处理任何异常,请使用 @AfterReturning@AfterThrowing
    • 如果您想实际捕获和处理抛出的异常和/或在调用之前修改方法参数或调用之后的返回值或完全跳过方法执行,请使用@Around 建议。

    【讨论】:

    • 如果我理解正确,您是说无法从After 中检索异常或返回值。我的问题中已经提到了您关于After*Around 的其余答案。
    • 你可能提到过它,但我解释它让大家了解什么时候使用它。请记住,我们在公开场合提问和回答,其他人也会阅读问题和答案。如果您只查看为三个@After* 注释定义的参数,您会发现确实如您所说,正如我解释的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2021-12-26
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    相关资源
    最近更新 更多