【发布时间】:2018-12-13 13:21:37
【问题描述】:
我最近开始学习注解,我想知道一个方法注解可以处理这个方法抛出的错误吗?或者要知道这个异常/错误的代码。
附:如果可以,下一步是根据错误代码重试此方法
附言我知道spring Retryable,但我不能使用它。我试图在谷歌中找到有关我的问题的信息,但我没有找到。
【问题讨论】:
标签: java exception methods annotations
我最近开始学习注解,我想知道一个方法注解可以处理这个方法抛出的错误吗?或者要知道这个异常/错误的代码。
附:如果可以,下一步是根据错误代码重试此方法
附言我知道spring Retryable,但我不能使用它。我试图在谷歌中找到有关我的问题的信息,但我没有找到。
【问题讨论】:
标签: java exception methods annotations
注释本身什么也不做。这只是标记代码。您需要有一些处理程序,它们会扫描您的类并在出现注释时做出反应。
大多数框架已经有处理程序和扫描器,因此开发人员包含适当的框架,添加适当的注释,并且由于这些框架将为开发人员或应用程序执行一些工作。
顺便说一句,对于错误处理,我建议使用这样的简单代理: Invoke method in another class's try catch block
【讨论】:
您可能更多地考虑Aspect Oriented Programming。
含义:java 注释不是关于将功能“添加到”方法中。它们是由某种组件(编译时的编译器或运行时的某个框架)“评估”并触发该组件中的活动的标记。
为了真正操纵方法的行为(例如:添加自动跟踪/日志记录代码),您需要 AOP 之类的东西。当然:编译器注释的全部目的是基于注释生成代码。 Project Lombok 就是一个很好的例子:你把注解放到你的源代码中,编译的类文件包含很多 Lombok 在编译过程中插入的东西。
【讨论】:
实际上,OOP 中的基本内容之一就是 IoC(控制反转)。我们在构建专业应用程序时需要注意这种方法。
https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
例如, 我们可以在项目的每个类中编写 try/catch 块。这是不好的做法。 而不是这种方式,我们可以使用@ControllerAdvice 注解。 只需定义一个特定的异常,JVM 会在所有类/请求中为您捕获它。这就是 IoC。
您可以在项目中的每个请求中捕获异常,如果您在 @ControllerAdvice 注释上的类中定义异常。
简单用法示例:
@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public final ResponseEntity httpRequestMethodNotSupportedException(Exception ex, WebRequest request) {
ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "there isn’t an URL like that",
request.getDescription(false));
return new ResponseEntity<>(exceptionResponse, HttpStatus.METHOD_NOT_ALLOWED);
}
这是关于@ControllerAdvice 的有用链接:
https://medium.com/@jovannypcg/understanding-springs-controlleradvice-cd96a364033f
【讨论】: