인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김상형님의 프로필 이미지
김상형

작성한 질문수

스프링 핵심 원리 - 고급편

매개변수 전달

어드바이스에 매개변수를 전달한다 는 개념이 잘 이해가지 않습니다

해결된 질문

작성

·

61

0

1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]

aop가 적용되는 메서드(joinpoint)의 정보 를 어드바이스에서 편하게 사용하려고 전달하는 걸까요?

또한

@Before("allMember() && args(arg,..)")
public void logArgs3(Integer arg) {
    log.info("[logArgs3] arg={}", arg);
}

이렇게 hello메서드의 매개변수가 String이었는데 Integer로 설정해주게 되면 필터링 역할도 같이 수행하는 것으로 보이는데 제대로 이해한 것이 맞는지 궁금합니다

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

김상형님께서 질문하신 AOP의 args 표현식과 관련된 내용을 설명드리겠습니다.

질문하신 대로, AOP에서 Before, Around 같은 어드바이스를 메서드(joinPoint)에 적용할 때, 해당 메서드의 매개변수를 어드바이스로 전달하여 이를 활용하는 것이 가능합니다. 이렇게 하면 어드바이스 내부에서 메서드 호출에 대한 구체적인 정보를 쉽게 사용할 수 있습니다.

예를 들어, 아래 코드에서:

@Before("allMember() && args(arg,..)")
public void logArgs3(Integer arg) {
    log.info("[logArgs3] arg={}", arg);
}

이러한 args(arg,..) 표현식은 해당 메서드의 첫 번째 매개변수를 Integer로 받는 경우에만 어드바이스가 적용됩니다. 즉, args는 매개변수의 타입을 필터링하는 역할을 수행하는 포인트컷입니다. 따라서, 메서드 매개변수가 String 타입이면 이 어드바이스는 적용되지 않습니다.

따라서, “hello 메서드의 매개변수가 String이었는데 Integer로 설정해주게 되면 필터링 역할도 같이 수행하는 것”이라는 이해가 올바릅니다. 이는 매개변수 타입 검사와 함께 동작하게 되는 것입니다.

관련된 보완 정보와 예제를 참고하실 수 있는 질문 답변을 아래 링크에서 확인하실 수 있습니다:
- args관련해서 질문있습니다!
- args 표현식을 이용한 매개변수 전달 개념 문의

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김상형님의 프로필 이미지
김상형

작성한 질문수

질문하기