포인트컷 재사용
공통 포인트컷만 모아놓은 애스펙트 작성를 작성합니다. 예를들어 MyPointcuts.
다른 애스펙트에서는 MyPointcuts.somePointcut() 처럼 static하게 액세스하여 참조합니다.
@Aspect
public class MyPointcuts {
@Pointcut("within(my..On*Listener+) && execution(!private !static * on*(..) throws !Exception)")
public void eventListenerMethods() {}
}
@Aspect
public class MyAspect {
@Around("my.MyPointcuts.eventListenerMethods()")
public Object handleListenerException(final ProceedingJoinPoint pjp) {
try {
return pjp.proceed();
} catch (final Throwable e) {
exceptionHandler.handle(e);
return null;
}
}
}
어드바이스 재사용
abstract 포인트컷을 만들고 그 포인트컷을 사용하는 어드바이스를 작성합니다. 애스펙트를 abstract로 선언해야 합니다(여전히 @Aspect 어노테이션 필요함).
@Aspect
public abstract class MyAspect {
@Pointcut("")
protected abstract void toOverridePointcut();
@After("toOverridePointcut()")
public void myAdvice() {
... ...
}
...
}
하위 애스펙트에서 abstract 포인트컷을 구현합니다.
@Aspect
public class YourAspect extends MyAspect {
@Pointcut("within(android.app.Activity+) && execution(void onCreate())")
protected void toOverridePointcut() {}
}
'Framework' 카테고리의 다른 글
[AspectJ] aspect 오버라이딩 (0) | 2012.04.29 |
---|---|
[AspectJ] @within() 과 @annotation() 차이점 (0) | 2012.04.26 |
[하이버네이트] lazy=true인 연관객체 미리 로딩하기 (0) | 2010.01.29 |
iBatis Abator 이름 변경 - iBATOR (1) | 2008.07.07 |
링크 : 어노테이션 기반 validation (0) | 2008.04.12 |