AOP 에서 value = 쓰는 이유??

백엔드&인프라 추종자·2025년 2월 27일

스프링 공부

목록 보기
19/35

@AfterReturning 어노테이션에서 value =를 사용하는 이유는 Spring AOP에서 여러 개의 속성(attribute)을 지정할 수 있기 때문입니다.


@AfterReturning 속성들

@AfterReturning 어노테이션에는 다음과 같은 속성이 있습니다:

속성명설명
value포인트컷(Pointcut) 지정 (필수)
returning반환값을 가져올 변수 지정 (선택)

예제 코드에서 value =returning =을 함께 사용하고 있습니다.

@AfterReturning(value = "execution( * example.day06.aop.TestService2.enter3(..))", returning = "result")
public void securityCheck4(Object result) {
    System.out.println("메소드 실행 후(after) : " + result + " 이/가 결과값 정상");
}

🔹 value는 왜 필요한가?

Spring AOP의 @AfterReturning에서 포인트컷을 반드시 지정해야 하기 때문입니다.

  • value = "execution(...)" 부분이 없으면 어떤 메서드를 감지할지 모르므로 예외가 발생합니다.
  • 즉, "어떤 메서드 실행 후에 동작할 것인지"를 지정해야 하므로 value가 필요합니다.
  • returning 속성은 선택 사항이므로 value 없이 단독으로 사용될 수 없습니다.

value = 없이 사용할 수 있는 경우

@AfterReturning에는 value가 필수 속성이지만, Spring에서는 첫 번째 속성을 value로 자동 인식하기 때문에 value =를 생략할 수도 있습니다.

value를 생략한 경우

@AfterReturning("execution( * example.day06.aop.TestService2.enter3(..))") // value 생략
public void securityCheck4() {
    System.out.println("메소드 실행 후(after)");
}

첫 번째 속성이 자동으로 value로 인식되므로 생략 가능

returning까지 사용하려면 value =를 명시해야 함

하지만 returning과 함께 사용할 경우, 명확하게 value =를 써줘야 합니다.

@AfterReturning(value = "execution( * example.day06.aop.TestService2.enter3(..))", returning = "result")
public void securityCheck4(Object result) {
    System.out.println("메소드 실행 후(after) : " + result + " 이/가 결과값 정상");
}

여러 속성이 있을 경우 value =를 명시하는 것이 가독성이 좋고 안정적임.


결론

  • @AfterReturning에서 첫 번째 속성(value)은 포인트컷을 지정하기 때문에 반드시 필요
  • returning 속성까지 함께 사용할 경우, 명확하게 value =를 써주는 것이 좋음
  • value =는 생략할 수 있지만, 여러 속성이 함께 있으면 명시하는 것이 권장됨 🚀
profile
AI 답변 글을 주로 올립니다.

0개의 댓글