execution(* com.nobrand.calculator.ArithmeticCalculator.*(..))
// modifier (public)
execution(public * com.nobrand.calculator.ArithmeticCalculator.*(..))
// 리턴타입 (double)
execution(public double com.nobrand.calculator.ArithmeticCalculator.*(..))
// 메소드 파라미터 (첫 번째 double 타입, 뒤는 몇 개라도 상관 없음)
execution(public double com.nobrand.calculator.ArithmeticCalculator.*(double, ..))
// 메소드 파라미터 (첫 번째, 두 번째 double 타입)
execution(public double com.nobrand.calculator.ArithmeticCalculator.*(double, double))
// annotation 정의
@Target(ElementType.METHOD, ElementType.TYPE)
@Retenion(RetentionPolicy.RUNTIME)
@Documented
public @interface Logging { }
// annotation 을 이용한 pointcut (조건)
@Aspect
public class CustomPointcuts {
@Pointcut(“annotation(com.nobrand.Logging)”)
public void loggingOperation() { }
}
필요한 메소드에 커스텀 애너테이션 (@Logging) 을 붙이고, Pointcut (조건) 은 해당 애너테이션을 체크합니다.
[1][AspectJ](https://www.eclipse.org/aspectj)