[스프링 핵심 원리 - 고급편] #13. 스프링 AOP - 포인트컷(2) #71
YONGHYNG
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
args
execution과 args의 차이점
판단한다.
@target, @Within
@target: 실행 객체의 클래스에 주어진 타입의 애노테이션이 있는 조인 포인트@within: 주어진 애노테이션이 있는 타입 내 조인 포인트설명
@target,@within은 다음과 같이 타입에 있는 애노테이션으로 AOP 적용 여부를 판단한다.@target(hello.aop.member.annotation.ClassAop)
@Within(hello.aop.member.annotation.ClassAop)
@target vs @Within
@target은 인스턴스의 모든 메서드를 조인 포인트로 적용한다.@within은 해당 타입 내에 있는 메서드만 조인 포인트로 적용한다.쉽게 이야기해서
@target은 부모 클래스의 메서드까지 어드바이스를 다 적용하고,@within은 자기 자신의 클래스에 정의된 메서드에만 어드바이스를 적용한다.AtTargetAtWithinTest
실행 결과

@within에서 AOP 적용 대상이 되지 않는다.[@within]이 호출되지 않은 것을 확인할 수 있다.참고
@target,@wuthin지시자는 뒤에서 설명할 파라미터 바인딩에서 함께 사용된다.주의
args,@args,@target이번 예제를 보면 execution(* hello.aop..*(..)) 를 통해 적용 대상을 줄여준 것을 확인할 수 있다.@args,@target은 실제 객체 인스턴스가 생성되고 실행될 때 어드바이스 적용 여부를 확인할 수 있다.args,@args,@target같은 포인트컷 지시자가 있으면 스프링은 모든 스프링 빈에 AOP를 적용하려고 시도한다. 앞서 설명한 것 처럼 프록시가 없으면 실행 시점에 판단 자체가 불가능하다.@annotation, @Args
@annotation
정의
@annotation: 메서드가 주어진 애노테이션을 가지고 있는 조인 포인트를 매칭설명
@annotation(hello.aop.member.annotation.MethodAop)다음과 같이 메서드(조인 포인트)에 애노테이션이 있으면 매칭한다.
AtAnnotationTest
실행 결과
@args정의
@args: 전달된 실제 인수의 런타임 타입이 주어진 타입의 애노테이션을 갖는 조인 포인트설명
@Check애노테이션이 있는 경우에 매칭@args(test.Check)bean
정의
bean: 스프링 전용 포인트 컷 지시자, 빈의 이름으로 지정한다.설명
BeanTest
실행 결과

매개변수 전달
@target,@within,@annotation,@args다음과 같이 사용한다.
args(arg, ..)=>args(String, ..)ParameterTest
실행 결과

this, target
정의
설명
this vs target
프록시 생성 방식에 따른 차이
MemberService 인터페이스 지정
this(hello.aop.member.MemberService)MemberServiceImpl 구체 클래스 지정
MemberService 인터페이스 지정
정리
ThisTargetTest
이렇게 하면 각 테스트마다 다른 설정을 손쉽게 적용할 수 있다.
를 사용한다.
기본으로 CGLIB를 사용한다. 이 부분은 뒤에서 자세히 설명한다.
spring.aop.proxy-target-class=false

JDK 동적 프록시 사용
spring.aop.proxy-target-class=true, 또는 생략(스프링 부트 기본 옵션)
CGLIB 사용
참고
Beta Was this translation helpful? Give feedback.
All reactions