하나의 예외가 다른 예외의 수퍼 클래스 인 경우, 두 개의 AfterThrows advice가 특정 예외 유형에 의해 제한된 동일한 pointcut에 적용될 수 있습니까? 하위 클래스가 캡처되는 경우 하나의 조언 만 실행됩니까?Spring, Aspect J, 동일한 Pointcut에 여러 AfterThrowing advice 적용
번역 할 내용 런타임 예외 (사용자 지정 및 표준 자바와 같은)는 서비스 계층에서 제거되어 특정 사례에서 특정 번역을 수행 한 다음 번역 할 모든 유형의 조언을 제공합니다. 정말 예상치 못한 아무것도 :
@AfterThrowing(pointcut = "execution(* com.my.company.api.*(..))", throwing = "rnfex") public void doTranslationAction(ResourceNotFoundException rnfex) { // throw new WebApplicationException with Status.NOT_FOUND; } @AfterThrowing(pointcut = "execution(* com.my.company.api.*(..))", throwing = "aex") public void doTranslationAction(AuthorisationException aex) { // throw new WebApplicationException with Status.NOT_AUTHORISED; } @AfterThrowing(pointcut = "execution(* com.my.company.api.*(..))", throwing = "throwable") public void doTranslationAction(Throwable throwable) { // Log something here about this unexpected exception // throw new WebApplicationException with Status.INTERNAL_SERVER_ERROR }
내가 명시 적으로 올바른 방법이라고 음식을 장만 예외가 발생하는 경우이 경우, 번역 예외가 넓은 '의 Throwable에 의해 다음 포착되는, 슬로우되는 것을 발견 '조언을 듣고 다시 캐치 올 INTERNAL_SERVER_ERROR WAE로 번역되었습니다. 이것은 예기치 않은 것이 아니라 내가 찾고있는 것만은 아닙니다.
이 문제를 해결하기 위해 모든 Throwable 유형을 캡처 한 다음 'instanceof'를 사용하여 이것이 특정 WAE로 변환 할 수있는 예상되는 런타임 예외인지 여부를 결정하는 조언을 얻었습니다.
내가 'instanceof'를 본다면 부끄러워 할 일이있을 것이라고 확신하지만이 문제없이이 문제를 해결하는 더 좋은 방법이 있는지 확실하지 않습니다.
예상 된 예외를 확인 된 예외로 변환 한 다음 런타임 예외를 잡아서 하나의 솔루션으로 간주 할 수도 있습니다.