작성
·
181
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 네
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네
[질문 내용]
여기에 질문 내용을 남겨주세요.
안녕하세요, AOP에서 사용하는 포인트컷 지시자에서, args, @args, @target은 단독으로 사용하게 된다면 스프링 모든 빈에 대해서 적용을 시도하기 때문에, 에러가 나는 것을 강의에서 확인해주셨는데요.
그런데, execution을 사용할 때 모든 메서드에 대해서 적용이 가능하도록 execution(* *(..)) 과 같은 식으로 사용해도 스프링 모든 빈에 대해서 적용을 시도하게 되고, 그러면 동일하게 에러가 발생해야되지 않는지 궁금합니다! (test 초반에 에러 안 나는 것은 봤는데 왜일까요 ㅠㅠ)
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
kwangjin12님의 질문에 관해 “@target 적용 여부가 애플리케이션 로딩 이후에 결정되는 이유”라는 질문이 비슷한 맥락을 가지고 있어 해당 내용을 안내드립니다. 이 내용은 @target이 적용 여부가 왜 애플리케이션 로딩 이후에 결정되어야 하는지에 대해 설명하고 있습니다.
질문에서처럼 args
, @args
, @target
지시자들과 execution
지시자의 차이는 주로 그 적용 시점과 대상에서 비롯됩니다. execution
지시자는 메서드 실행 시점에 매칭되는 패턴을 가진 모든 메서드를 대상으로 하여 적용되며, 이는 대부분 포인트컷 표현식 내에서 명확하게 범위를 지정해 줄 수 있기 때문에 에러없이 더 넓은 사용이 가능합니다. 즉, 실제로 존재하는 메서드에만 적용되기 때문에 스프링 애플리케이션의 전체 빈에 무분별하게 적용되어 에러가 발생하는 일이 덜합니다.
한편, args
, @args
, @target
지시자는 좀 더 세밀한 조건에 의해 적용되는데, 대상이 되는 빈의 실제 인스턴스의 상태나 어노테이션 존재 여부 등에 따라 결정되는 경우가 많습니다. 이는 런타임에 결정되는 조건들이기 때문에 예상치 못한 에러를 발생시킬 수 있고, 실제 적용 범위를 알기가 더 어렵습니다.
execution
지시자가 에러 없이 넓은 사용이 가능한 이유는 이 지시자가 메서드의 실행을 대상으로 하기 때문에, 스프링의 빈 로딩 과정과는 다소 독립적으로 작동할 수 있으며, 구체적으로 정의된 범위 내에서만 AOP 기능을 적용하게 됩니다. 따라서 에러 발생의 가능성이 상대적으로 낮습니다.
질문하신 내용에 대한 보다 구체적인 설명이나 추가 질문이 있으시다면, 해당 강의의 질문 게시판을 통해 질문을 남겨보시는 것도 좋은 방법입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.