我最近开始学习注释,我想知道方法注释可以处理此方法引发的错误吗?或了解此异常/错误的代码。
P.S。如果可以的话,下一步是根据错误代码重试此方法
P.S.S。我知道spring Retryable,但是我不能使用它。我试图在Google中找到有关我的问题的信息,但没有找到。
答案 0 :(得分:2)
注释本身不起作用。它只是标记代码。您需要有一些处理程序,可以扫描您的类并在有注释的情况下做出反应。
大多数框架已经具有处理程序和扫描器,因此开发人员包括适当的框架,添加适当的注释,并且由于这些框架将为开发人员或应用程序执行某些工作。
顺便说一句,对于错误处理,我建议使用这样的简单代理: Invoke method in another class's try catch block
答案 1 :(得分:2)
您可能更在考虑Aspect Oriented Programming。
含义:Java注释与添加功能“到”方法无关。它们是由某种组件(在编译时是编译器,在运行时是某种框架)“评估”的标记,并触发该组件中的活动。
为了真正地操纵一种方法的行为(例如:添加自动跟踪/记录代码),您需要诸如AOP之类的东西。当然:编译器注释的全部目的是基于注释生成代码。 Project Lombok是这类事情的一个很好的例子:将注释放入源代码中,并且已编译的类文件包含Lombok在编译期间插入的许多东西。
答案 2 :(得分:1)
实际上,OOP中的基本内容之一是IoC(控制反转)。在构建专业应用程序时,我们需要注意这种方法。
https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
例如, 我们可以在项目的每个类中编写try / catch块。 代替这种方式,我们可以使用@ControllerAdvice注释。 只需定义一个特定的异常,JVM就会为您处理所有类/请求中的异常。这就是IoC。
如果在放置在@ControllerAdvice注释上的Class中定义异常,则可以在项目中的每个请求中捕获异常。
简单用法示例:
@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