작성
·
405
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
포인트컷 표현식을 이용하여 매개변수를 전달하는 것을 공부했습니다. 이 개념과 본래 포인트컷의 개념이 헷갈려서 문의드립니다.
@Around("allMember() && args(arg, ..)")
public Object logArgs2(ProceedingJoinPoint joinPoint, Object arg) throws Throwable {
log.info("[logArgs2]{}, arg={}", joinPoint.getSignature(), arg);
return joinPoint.proceed();
}
포인트컷은 조인 포인트를 필터링하기 위한 개념으로 공부했습니다. 위 코드에서 args(args, ..)
부분의 args가 매개변수를 나타내는 것은 이해가 됩니다. 하지만 ArgsTest 코드에서 학습했을 때는 args() 표현식 안에 String
, Object
, java.io.Serializable
등등과 같은 타입을 적어줘서, 매개변수의 타입을 필터링했었거든요. 그러면 args는 어떤 타입을 필터링하는 포인트컷인가요? 무엇이든 상관없는건가요?
답변 2
0
안녕하세요. 호춘님, 공식 서포터즈 코즈위버 입니다. AI 답변에 더하여 답변 드립니다.
질문하신것처럼 어떤 표현식도 가능합니다. 타입을 명시하면 필터를 추가하는 개념으로 이해하시면 됩니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
args 표현식을 이용하여 매개변수를 전달하는 내용에 대해 문의하셨는데요.
포인트컷 표현식인 “@Around(“allMember() && args(arg, ..)”)“에서 args(arg, ..) 부분은 매개변수를 전달하는 역할을 합니다. 여기서 arg는 첫 번째 매개변수를 의미하고, 이후에 오는 ” .. “은 0개 이상의 매개변수를 의미합니다.
즉, 위의 코드에서 “allMember()“로 필터링된 조인 포인트에 대해 첫 번째 매개변수를 받아 로그를 출력하게 되는 것입니다.
포인트컷은 조인 포인트를 필터링하여 어떤 메서드에 어떤 조건을 걸지 정의하는데 사용되며, args 표현식은 매개변수의 값에 따라 조건을 추가할 수 있습니다.
포인트컷과 매개변수 전달 개념이 헷갈렸던 것 같은데, 포인트컷은 매개변수를 필터링하여 어떤 메서드에 적용할지를 정하는 역할을 하고, args 표현식은 매개변수의 값을 조건으로 추가하여 필터링하는 역할을 합니다.
더 궁금한 점이 있으시면 언제든지 물어보세요!