@Transaction
를 사용하기 전에 내 비즈니스 코드 모델은 아마도 다음과 같았을 것입니다.
위와 마찬가지로 위의 데이터베이스 작업이 성공적으로 실행되거나 실패하더라도 로그에서 피드백을 얻을 수 있습니다.
그러나 위의 접근 방식은 코드 중복을 많이 발생시킵니다. 이러한 로깅 기능은 spring에서 제공하는 aop를 사용하여 구현할 수 있습니다. 그러나 나중에 문서를 살펴보니 이 주석을 사용하는 것이 있습니다. , 코드는 다음과 같이 단순화될 수 있습니다:@Transaction
으아악
이런 경우 삽입 작업이 실패하면 어떻게 로그에 기록해야 할까요?
이제 나의 초기 아이디어는와 유사한 동적 반사 기능을 수동으로 구현하여 데이터베이스의 데이터 수정에 영향을 미치는 각 메소드가 실행될 때invoke()
예외 처리를 동적으로 반영하는 것입니다.try catch
메소드에서 수행됩니다.@Transaction
的动态反射的功能,这样每个要影响数据库中的数据修改的方法执行的时候我都在动态反射的invoke()
方法中进行异常的try catch
근데 스프링에 그런 기능이 내장되어 있는지 모르겠네요?
수준에서 처리하려고 최선을 다하고 로그 기록을 위에 던지는 것을 원하지 않습니다.service
insertOneStudent 메소드 전체 시도 캐치
으아악또는 @RestControllerAdvice를 구현하고 거기에 예외 로그를 인쇄하세요.
으아악다음과 같습니다:
Spring은 측면 예외 처리도 제공합니다
으아악물론 xml 구성이 있으면 주석 구성도 있습니다. 주로 다음과 같은 댓글이 있습니다
@Aspect는 측면 구성을 선언합니다
@Pointcut은 측면을 선언합니다
@AfterThrowing 선언 처리 방법
참고:
예외를 처리하는 클래스는 인터페이스를 구현하거나 클래스를 상속할 필요가 없습니다.
예외 처리 방법에서는 두 개의 매개변수를 선언해야 합니다(선언할 수도 없으며 예외 정보를 얻을 수 없음). 예를 들어
으아악joinPoint 매개변수는 예외를 발생시키는 메소드 매개변수 정보를 얻을 수 있습니다.
위 내용은 참고용입니다. Spring 버전에 따라 위 지침이 실제 상황과 다를 수 있습니다. 표준 지침은 Spring 공식 문서를 참조하세요.