pointcut spring

개발새발·2023년 1월 13일
0

spring

목록 보기
17/26

특정 path일때는 ControllerInterpreter를 거치지 않게 하고 싶었다. 동료분이 pointcut 에서 빼면 어떻게 될 것 같다고 해서 pointcut 를 찾아보다가 정리하고 싶어서 정리하게 되었다.

pointcut 이전에 알아야할 것 😎

AOP란?

Aspect Oriendted Programming의 약자
높은 응집도
핵심로직이 아니라 트랜잭션, 로깅 처리, 인증과 관련된 코드들이 있는데(비핵심이지만 꼭 필요한 것), 이를 공통화할 수 있는 부분을 따로 빼서 관리하는 것이다.
AOP 용어 중, Advice, Joinpoint, Pointcut 등이 있다.


Advice이란?

스프링에서는 핸들러를 Advice 라는 개념으로 사용한다.
java레벨이 아닌 XML을 통해 객체를 생성하고 인젝션한다.
타깃 오브젝트에 적용할 부가기능을 담은 오브젝트이다.
메인 업무에 보조적으로 추가될 보조업무를 의미한다.
4가지 형태의 Advice가 있다.

Advice의 형태

  • Before : 메소드 실행전에 동작
  • After : 메소드 실행후에 동작
  • After-returning : 메소드가 정상적으로 실행된 후에 동작
  • After-throwing : 예외가 발생한 후에 동작
  • Around : 메소드 호출 이전, 이후, 예외 발생 등의 모든 시점에 동작

Aspect

포인트컷과 어드바이스의 결합이다. 어떤 포인트컷 메소드에 대해 어떤 어드바이스 메소드를 실행할지 결정한다.

Jointpoint이란?

클라이언트가 호출하는 모든 비즈니스 메소드, 조인포인트 중에서 포인트컷이 된다. 즉, 포인트컷의 후보라 할 수 있다.

그렇다면..Pointcut이란?! 🤨

특정 조건에 의해서 필터링된 조인포인트라 할 수 있다. 수많은 조인포인트 중 특정 메소드에서만 공통기능을 수행시키기 위함이다.

Pointcut의 지시자

  • execution : 가장 정교한 포인트컷이다. 리턴타입, 패키지경로, 클래스명, 메소드명(매개변수)으로 정의가 가능하다.
  • within : 타입패턴 내에 해당하는 모든 것들을 포인트컷으로 지정가능하다.
  • bean : bean이름으로 포인트컷으로 지정가능하다.

예시

@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 );
    }
}
profile
발새발개

0개의 댓글