@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 =는 생략할 수 있지만, 여러 속성이 함께 있으면 명시하는 것이 권장됨 🚀