2017-11-07 28 views
0

에 예외를 위임하는 방법 : 내가 어떤 상황을 처리하는 부분을 만들어 외부 항아리 라이브러리가 측면

@Aspect 
@Component 
public class MyAspect { 

    @Around("execution(..") 
    private Object process(ProceedingJoinPoint pjp) throws Throwable { 
     Exception ex = null; 

     while (zkusDalsiSpojeni) { 
      try { 
       return pjp.proceed(); 
      } catch (Exception e) { 
       solveException(ex); 
      } 
     } 
    } 
} 

그래 내가 여기에 몇 가지 예외를 던질 수 있습니다. 하지만이 항아리가 종속성이 될 주 프로젝트에서 사용자 지정 예외를 throw하는 옵션을 만들고 싶습니다. 그것을하는 가장 좋은 방법은 무엇입니까? (추상 측면 또는 일부 위임자?) 당신이 인터페이스를 사용하여 측면을 사용하는 경우

+0

알 수없는 유형의 예외를 던지시겠습니까 '프로세스'시체? 클래스 멤버를 사용하여 주석을 작성하고 메소드에 애스펙트가 적용되는지 여부를 확인하는 방법에 대해 설명합니다. 따라서이 예외 유형의 인스턴스를 생성하고이를 버릴 수 있습니다. –

+0

일부 사용자 지정 예외를 throw하고 싶지만 또한 주 프로젝트에서 정의 된 다른 사용자 지정 예외를 throw하는 옵션이 필요합니다. – hudi

답변

0

, 정의 할 수있는 주석

@Target(ElementType.Method) 
@Retention(RetentionPolicy.Runtime) 
@interface DesiredException { 
    Class<? extends Throwable> value(); 
} 

및 확인할 수있는 측면에서 필요한 방법

@DesiredException(IllegalStateException.klass) 

에 적용 이 주석이 선언되고 그에 따라 행동하면

MethodSignature methodSignature = (MethodSignature)pjp.getSignature(); 
DesiredException desiredException = methodSignature.getMethod().getAnnotation(DesiredException.class); 
if(desiredException!=null){ 
    Throwable exception = desiredException.value().newInstance(); 
    throw exception; 
}