You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
섹션 12. 스프링 AOP - 포인트컷
1️⃣ 포인터컷 지시자
포인트컷 표현식 알아보기
에스펙트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공한다.
포인트컷 표현식은 AspectJ pointcut expression 즉 애스펙트J가 제공하는 포인트컷 표현식을 줄여서 말하는 것이다.
✅포인트컷 지시자
execution을 가장 많이 사용한다. 중점적으로 알아보자.
2️⃣ 예제 만들기
✅ ClassAop
✅ MethodAop
✅ MemberService
✅ ExecutionTest
AspectJExpressionPointcut이 바로 포인트컷 표현식을 처리해주는 클래스다. 여기에 포인트컷 표현식을 지정 하면 된다.AspectJExpressionPointcut는 상위에 Pointcut 인터페이스를 가진다.
printMethod()테스트는MemberServiceImpl.hello(String)메서드의 정보를 출력해준다.실행 결과
3️⃣ execution1
✅ 가장 정확한 포인트컷
로 반환한다.
➡️매칭 조건
접근제어자?:
public반환타입:
String선언타입?:
hello.aop.member.MemberServiceImpl메서드이름:
hello파라미터:
(String)예외?: 생략
MemberServiceImpl.hello(String)메서드와 포인트컷 표현식의 모든 내용이 정확하게 일치한다. 따라서true를 반환한다.✅ 가장 많이 생략한 포인트컷
➡️ 매칭 조건
접근제어자?: 생략
반환타입:
*선언타입?: 생략
메서드이름:
*파라미터:
(..)예외?: 없음
파라미터에서
..은 파라미터의 타입과 파라미터 수가 상관없다는 뜻이다. (0..*) 파라미터는 뒤에 자세히 정리할 예정✅ 메서드 이름 매칭 관련 포인트컷
*을 사용해서 매칭할 수 있다.✅ 패키지 매칭 관련 포인트컷
hello.aop.member.(1).(2)
패키지에서
.,..의 차이를 이해해야 한다.4️⃣ execution2
✅ 타입 매칭 - 부모 타입 허용
✅ 타입 매칭 - 부모 타입에 있는 메서드만 허용
internal(String)메서드를 매칭하려 한다.MemberService에는internal(String)메서드가 없다!hello(String)메서드는 매칭에 성공하지만, 부모 타입에 없는internal(String)는 매칭에 실패한다.✅ 파라미터 매칭
➡️ execution 파라미터 매칭 규칙
(String): 정확하게 String 타입 파라미터(): 파라미터가 없어야 한다.(*): 정확히 하나의 파라미터, 단 모든 타입을 허용한다.(*, *): 정확히 두 개의 파라미터, 단 모든 타입을 허용한다.(..): 숫자와 무관하게 모든 파라미터, 모든 타입을 허용한다. 참고로 파라미터가 없어도 된다.0..*면 된다.
(String, 로 이해하 ..): String 타입으로 시작해야 한다. 숫자와 무관하게 모든 파라미터, 모든 타입을 허용한다.(String),(String, Xxx),(String, Xxx, Xxx)허용5️⃣ within
within지시자는 특정 타입 내의 조인 포인트들로 매칭을 제한한다. 쉽게 이야기해서 해당 타입이 매칭되면 그 안의 메서드(조인 포인트)들이 자동으로 매칭된다.execution에서 타입 부분만 사용한다고 보면 된다.✅ WithinTest
within사용시 주의해야 할 점이 있다. 표현식에 부모 타입을 지정하면 안된다는 점이다. 정확하게 타입이 맞아야 한다.execution과 차이가 난다.✅ WithinTest - 추가
MemberService인터페이스) 지정시within은 실패하고,execution은 성공하는 것을 확인할 수 있다.All reactions