在Java中登录时尝试finally的替代方法

在Java中登录时尝试finally的替代方法,java,exception,try-finally,Java,Exception,Try Finally,我目前正在处理的代码中的许多方法都遵循某种模式: public void aMethod(...) throws CustomException { Log("aMethod Started") try { //Many method calls that could throw a CustomException } finally { Log("aMethod Ended") } } 更改有关CustomException的任

我目前正在处理的代码中的许多方法都遵循某种模式:

public void aMethod(...) throws CustomException {
    Log("aMethod Started")
    try {
        //Many method calls that could throw a CustomException
    } finally {
        Log("aMethod Ended")
    }
}
更改有关CustomException的任何内容都不是选项

有没有更好的选择不适用于try finally?

我会说

finally {
    Log("aMethod Ended")
}
这不是记录方法结尾的好方法。 如果发生异常,该方法实际上并没有结束,而是中断并返回,而没有完成

因此,“日志(“aMethod Ended”)”应在finally之外。如果该日志中缺少结束记录器,您仍将从异常堆栈跟踪中获取

如果您只想记录方法是否被调用然后离开,那么SpringAOP就是可以为整个产品配置实现的,因此您不需要到处复制记录器

另一方面,如果你个人觉得这个记录器没有多大用处,只是多余的信息;然后在solar lint配置中关闭该规则。

我会说

finally {
    Log("aMethod Ended")
}
这不是记录方法结尾的好方法。 如果发生异常,该方法实际上并没有结束,而是中断并返回,而没有完成

因此,“日志(“aMethod Ended”)”应在finally之外。如果该日志中缺少结束记录器,您仍将从异常堆栈跟踪中获取

如果您只想记录方法是否被调用然后离开,那么SpringAOP就是可以为整个产品配置实现的,因此您不需要到处复制记录器


另一方面,如果你个人觉得这个记录器没有多大用处,只是多余的信息;然后在solar lint配置中关闭该规则。

您不喜欢或想要改进的当前模式是什么?您使用的是纯Java吗?否则,AOP是一个选项(例如Spring)。使用SonarLint和我使用的每一种新方法都会让人恼火,我必须应用这种模式。AOP使用Spring,如@daniu所说,或者使用J2EE环境中的拦截器实际上,AOP几乎可以在任何环境中使用-这取决于您是否已经在使用提供AOP功能的框架,如Spring或JavaEE/JakartaEE,或者您是否必须自己添加框架,如AspectJ、Guice、CDI等-也就是说,AOP最有可能是您想要的,例如,添加一个类似日志记录的模式。您不喜欢或想要改进的当前模式是什么?您使用的是纯Java吗?否则,AOP是一个选项(例如Spring)。使用SonarLint和我使用的每一种新方法都会让人恼火,我必须应用这种模式。AOP使用Spring,如@daniu所说,或者使用J2EE环境中的拦截器实际上,AOP几乎可以在任何环境中使用-这取决于您是否已经在使用一个提供AOP功能的框架,如Spring或JavaEE/JakartaEE,或者您是否必须自己添加一个框架,如AspectJ、Guice、CDI等-也就是说,AOP很可能是您想要的,即添加一个类似日志记录的框架。不使用Spring,但AOP确实是一条路要走!那么春天的AOP为什么春天的AOP。AOP也可以在没有弹簧的情况下使用这是他指定的他使用了没有弹簧的AOP。它已排序。不使用Spring,但AOP确实是一种方式!那么春天的AOP为什么春天的AOP。AOP也可以在没有弹簧的情况下使用这是他指定的他使用了没有弹簧的AOP。已经分类了。