
GetMapping에서는 바디가 필요 없어서 유효성 검사가 없음!
[ MyValidationHandler 클래스생성 ]

[ 컨트롤러에서 복사 → org.springframework.web.bind.annotation ]
package shop.mtcoding.blog._core.errors;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect // AOP 등록
@Component //IoC 등록
public class MyValidationHandler {
// Advice (부가 로직 hello 메서드) //Advice - 포인트컷(Pointcut)에 의해 선택된 특정 지점에서 실제로 실행될 코드의 조각
// Advice가 수행될 위치 === PointCut
@Before("@annotation(org.springframework.web.bind.annotation.GetMapping)") // <이걸 바로 PointCut 이라고 함
public void hello(JoinPoint joinPoint) {
System.out.println("MyValidationHandler : hello_______________");
}
}
@Before 어노테이션은 지정된 조인 포인트(JoinPoint) 바로 전에 실행되어야 할 코드를 정의한다
표현식 "@annotation(org.springframework.web.bind.annotation.GetMapping)"은
포인트컷(Pointcut)을 지정하는데,
이는 @GetMapping 어노테이션이 붙은 메서드가 실행되기 직전에
어드바이스인 hello 메서드가 실행되어야 함을 의미한다!
@GetMapping 어노테이션이 붙은 어떤 컨트롤러 메서드가 호출될 때마다,
그 호출이 실제 메서드의 로직을 실행하기 전에
MyValidationHandler 클래스의 hello 메서드가 실행된다.
hello 메서드는 이 시점에 특정 로직(예: 로깅, 유효성 검사 등)을 수행할 수 있다.
(= hello 메서드가 @Before 어드바이스로 지정되었기 때문에,
@GetMapping 어노테이션이 붙은 메서드가 실제로 실행되기 전에
hello 메서드가 호출되어 실행될 것)
[ 결과 ]

화면은 json으로 뜬다.

GetMapping 실행하자, hello 뜬 것 확인. GetMapping 일 때만 실행되도록 걸어놓음
[ 다시 때려보자 1 ]
package shop.mtcoding.blog._core.errors;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect // AOP 등록
@Component //IoC 등록
public class MyValidationHandler {
// Advice (부가 로직 hello 메서드)
// Advice가 수행될 위치 === PointCut
@Before("@annotation(org.springframework.web.bind.annotation.GetMapping)") // <이걸 바로 PointCut 이라고 함
public void hello(JoinPoint jp) {
Object[] args = jp.getArgs(); //파라미터 (매개변수)
System.out.println("크기 : " + args.length);
System.out.println("MyValidationHandler : hello_______________");
}
}


Object[] args = jp.getArgs();
메소드가 실행될 때 메소드에 전달된 인자들을 가져오는 것.
즉, 메소드가 실행될 때 그 메소드에 어떤 인자들이 전달되었는지를 확인할 수 있게 해준다.
예를 들어, 어떤 메소드가 2개의 인자를 받는다면, args.length는 2가 된다.
이를 통해 메소드 실행 시 어떤 데이터가 사용되고 있는지를 파악할 수 있다.
[ 다시 때려보자 2 ]
package shop.mtcoding.blog._core.errors;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect // AOP 등록
@Component //IoC 등록
public class MyValidationHandler {
// Advice (부가 로직 hello 메서드)
// Advice가 수행될 위치 === PointCut
@Before("@annotation(org.springframework.web.bind.annotation.GetMapping)") // <이걸 바로 PointCut 이라고 함
public void hello(JoinPoint jp) {
Object[] args = jp.getArgs(); //파라미터 (매개변수)
System.out.println("크기 : " + args.length);
for (Object arg : args) {
System.out.println("매개변수 : " + arg);
}
System.out.println("MyValidationHandler : hello_______________");
}
}

+)

AOP를 활용하여 특정 조건에 따라 다른 메시지를 출력하는 것이 가능하다
detail 메서드의 실행 결과가 1이면 good, 2면 bad... 이런 식으로 sout 출력 할 수 있음!
Share article