컨트롤러가 파라미터를 받아올 때, Aspect(공통기능, @Aspect 어노테이션이 붙은 클래스)를 구현한 Advice(Aspect의 기능을 일컫음)는 ProceedingJoinPoint 인터페이스를 통해 컨트롤러가 받는 파라미터를 통째로 가져올 수 있다.
@Component
@Aspect
public class UserBindingAdvice {
// 정규 표현식문법
// Advice(공통기능)을 사용 할 클래스의 경로를 나타낸다
// io.grz.cocktail.controller.api내의 모든 ~Controller이름의 클래스 중 인자 상관없이 모든 함수에 적용
// 문법일 뿐이니 검색하여 찾아보아도 좋다
@Around("execution(* io.grz.cocktail.controller.api..*Controller.*(..))")
public void validCheck(ProceedingJoinPoint proceedingJoinPoint){
...
}
}
Java
복사
Advice는 컨트롤러가 리플렉션으로 스캔된 다음에서야 사용되니, Controller가 메모리에 위치한 이후에 스캔되는 Component으로 지정해주어도 무방하다.
Advice가 타깃 함수의 앞 또는 뒤에서 실행되도록 하고 싶을땐 @Around, @After, @Before 어노테이션으로 이를 지정해줄 수 있다. 그리고 Advice를 적용할 위치를 정규표현식 문법을 통하여 지정해주어야 한다.
proceedingJoinPoint에는 Object 타입의 argument들이 있다. 이들의 인스턴스를 먼저 확인하여 다운캐스팅 한 후, 원하는 로직을 추가여 Object 타입을 리턴할 수 있다.
함수를 이어서 진행한다면 proceedingPoint의 proceed()메소드를 사용해 재개할 수 있고, 리턴값을 받아 후처리 또한 진행할 수 있다.