특정 path일때는 ControllerInterpreter를 거치지 않게 하고 싶었다. 동료분이 pointcut 에서 빼면 어떻게 될 것 같다고 해서 pointcut 를 찾아보다가 정리하고 싶어서 정리하게 되었다.
pointcut 이전에 알아야할 것 😎
Aspect Oriendted Programming의 약자
높은 응집도
핵심로직이 아니라 트랜잭션, 로깅 처리, 인증과 관련된 코드들이 있는데(비핵심이지만 꼭 필요한 것), 이를 공통화할 수 있는 부분을 따로 빼서 관리하는 것이다.
AOP 용어 중, Advice, Joinpoint, Pointcut 등이 있다.
스프링에서는 핸들러를 Advice 라는 개념으로 사용한다.
java레벨이 아닌 XML을 통해 객체를 생성하고 인젝션한다.
타깃 오브젝트에 적용할 부가기능을 담은 오브젝트이다.
메인 업무에 보조적으로 추가될 보조업무를 의미한다.
4가지 형태의 Advice가 있다.
포인트컷과 어드바이스의 결합이다. 어떤 포인트컷 메소드에 대해 어떤 어드바이스 메소드를 실행할지 결정한다.
클라이언트가 호출하는 모든 비즈니스 메소드, 조인포인트 중에서 포인트컷이 된다. 즉, 포인트컷의 후보라 할 수 있다.
특정 조건에 의해서 필터링된 조인포인트라 할 수 있다. 수많은 조인포인트 중 특정 메소드에서만 공통기능을 수행시키기 위함이다.
@Slf4j
@RequiredArgsConstructor
@Aspect
@Component
public class ControllerInterceptor
@Pointcut("execution(* com.pacakage.controller.Controller.*(..))")
private void testMethod(){}
@Pointcut("execution(* com.pacakage.controller.Controller.*(..))")
private void testMethod2(){}
@Around("testMethod() || testMethod2()")
public Object preProcessAccessToken(ProceedingJoinPoint pjp) throws Throwable {
Object[] newArgs = new Object[]{};
....
....
....
return pjp.proceed( newArgs );
}
}