프록시가 있어야 어드바이스를 적용할 지 말지를 판단한다는게 무엇인지 잘 모르겠습니다.
340
작성한 질문수 24
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
강의 내용을 다시 읊어보면,
" 이번 예제를 보면 execution(* hello.aop..*(..)) 를 통해 적용 대상을 줄여준 것을 확인할 수 있다. args , @args , @target 은 실제 객체 인스턴스가 생성되고 실행될 때 어드바이스 적용 여부를 확인할 수 있다."
여기까지는 이해했습니다.
다음 부분부터 이해가 잘 안되는데,
==
" 실행 시점에 일어나는 포인트컷 적용 여부도 결국 프록시가 있어야 실행 시점에 판단할 수 있다. "
여기서 실행이라는 것이 애플리케이션의 실행을 말씀하시는 것인가요? 아니면 프록시로 생성된 인스턴스의 메소드 실행을 의미하는 것인가요?
== ==
"프록시가 없다면 판단 자체가 불가능하다. 그런데 스프링 컨테이너가 프록시를 생성하는 시점은 스프링 컨테이너가 만들어지는 애플리케이션 로딩 시점에 적용할 수 있다. "
이 부분도 잘 이해가 가지 않습니다. 스프링 컨테이너가 프록시를 생성하는 시점을 애플리케이션 로딩 시점에 적용할 수 있다는 것이 어떤 의미인가요?
스프링 컨테이너가 프록시를 생성하는 시점과, 애플리케이션 로딩 시점이 같다는 의미일까요?
====
" 따라서 args , @args , @target 같은 포인트컷 지시자가 있으면 스프링은 모든 스프링 빈에 AOP를 적용하려고 시도한다. "
예를들어 @target같은 경우는, 주어진 어노테이션이 붙어있는 클래스의 인스턴스가 스프링 빈으로 등록이 되려고 할 때에만 AOP를 적용하려고 시도하는 것이 아닌가요?
답변 1
1
안녕하세요. blackjack_96님
"실행 시점에 일어나는 포인트컷 적용 여부도 결국 프록시가 있어야 실행 시점에 판단할 수 있다."에서 말하는 '실행'은 프록시로 생성된 인스턴스의 메소드 실행을 의미합니다. 즉, 애플리케이션의 전체 실행이 아니라, AOP가 적용된 메소드가 호출될 때를 말합니다. 프록시는 이 메소드 호출이 포인트컷에 정의된 패턴과 일치하는지를 실행 시점에 검사하여, 조건에 맞는 경우에만 어드바이스(Advice)를 적용합니다.
@target 지시자는 특정 어노테이션이 붙은 대상 객체에만 AOP를 적용하도록 합니다. 하지만 중요한 점은 스프링이 이런 포인트컷을 사용할 때, 실제 인스턴스가 생성되어 해당 어노테이션이 적용되었는지 확인하기 전에는 정확하게 AOP 적용 여부를 결정할 수 없다는 것입니다. 따라서 스프링은 포인트컷 조건을 충족할 가능성이 있는 모든 빈에 대해 프록시를 생성하고, 실제 메소드 실행 시에 포인트컷 조건이 맞는지를 검사하게 됩니다.
감사합니다.
어드바이스 순서 디폴트 기준이 궁금합니다.
0
52
1
AspectV1 예제를 @Configuration 수동 등록으로도 가능한가요?
0
79
2
구체 클래스를 상속받아 확장한 형태도 클래스패턴/데코레이터 패턴이라고 칭하나요?
0
56
1
TraceTemplate 을 미리 빈으로 등록해서 사용할때 이렇게 설정하는게 맞는건가요?
0
53
1
Decorator 에서 추상메서드로 뺄때 질문 있습니다.
0
56
1
대상 클래스에 기본 생성자가 없을 때
0
75
1
스프링 부트 버전 4.0 aop 의존성 명칭 변경
1
356
2
final 키워드 사용 관련 질문
0
77
1
안녕하세요
0
64
1
ThradLocal 실무 사례
0
97
2
실무에서의 동시성 문제
0
62
1
로그 등 부가 기능에 대한 테스트코드
0
50
1
ProceedingJoinPoint와 MethodInvocation에 대하여
0
67
1
실무 멀티스레딩에 대한 궁금증
0
69
1
안녕하세요 질문있습니다
0
44
1
AspectV3 aop 실행 순서 문의 드립니다
0
38
1
MDC vs AOP 중에 고민중입니다.
0
75
1
순환참조
0
161
2
this를 단독으로 사용할때랑 파라미터 바인딩 할때 차이
0
77
1
빈 후처리에 등록 질문 있습니다.
0
76
1
AppConfig 설정하는 설명중에 이해가 안되는게 있습니다.
0
89
1
ThreadLocal을 지역변수로 선언하면 remove가 필요할까요?
0
117
2
@Aspect 어노테이션으로 생성된 Advisor의 Bean 저장 여부
0
68
1
ThreadLocal 사용시 부작용이 있을수 있을까요? (ThreadLocal.remove()를 잘한다고 해도..)
0
73
2





