hyeongmcho.log
로그인
hyeongmcho.log
로그인
PointCut 표현식
CHM
·
2022년 6월 24일
팔로우
0
PointCut 표현식
aspect
0
Spring
목록 보기
23/26
PointCut 표현식 문법
AspectJ 포인트컷 표현식은 포인트컷 지시자를 이용해 작성
가장 대표적 지시자 : execution()
execution() 문법
: execution([접근제한자 패턴] 타입패턴 [타입패턴] 이름패턴 (타입패턴|"..",...)
execution() 예시
execution(* aspects.trace.demo.*.*(..))
execution(* hello(..))
: hello라는 이름을 가진 메서드를 선정하는 것. 파라미터는 모든 종류를 다 허용한다.
execution(* hello())
: 파라미터 패턴이()로 되어 있으니 hello 메서드 중에서 파라미터가 없는 것만 선택한다.
execution(
myspring.user.service.UserServiceImpl.
(..))
: myspring.user.service.UserServiceImpl 클래스를 직접 지정하여 이 클래스가 가진 모든 메서드를 선택한다.
execution(
myspring.user.service.
.*(..))
: myspring.user.service 패키지의 모든 클래스에 적용된다. 하지만 서브패키지의 클래스는 포함되지 않는다.
execution(
myspring.user.service..
.*(..))
: myspring.user.service 패키지의 모든 클래스에 적용된다. 그리고 '..'를 사용하여 서브패키지의 모든 클래스까지 포함한다.
execution(*
..Target.
.(..))
: 패키지에 상관없이 Target이라는 이름의 모든 클래스에 적용됨. 다른 패키지에 같은 이름의 클래스가 있어도 적용이 된다는 점에 유의
Spring AOP 구현방식(@Aspect)
1. XML 기반의 POJO 클래스를 이용한 AOP 구현
부가기능을 제공하는 Advice 클래스를 작성함
XML 설정 파일에 <aop:config>를 이용해서 애스팩트를 설정(즉, 어드바이스와 포인트컷을 설정)
2. @Aspect 어노테이션을 이용한 AOP 구현
XML 설정파일에 <aop:aspectj-autoproxy/>를 설정
@Aspect 어노테이션을 이용해서 부가기능을 제공하는 Aspect클래스만 작성하면 된다.
이 때 Aspect 클래스는 어드바이스를 구현하는 메서드와 포인트컷을 포함한다.
Aspect 어노테이션
Aspect 클래스 선언 시 @Aspect 어노테이션 사용
@Aspect 어노테이션을 사용할 경우 XML 설정 파일에 어드바이스와 포인트컷을 설정하는 것이 아니라 클래스 내부에 정의할 수 있음
<aop:aspectj-autoproxy> 태그를 설정파일에 추가하면 @Aspect 어노테이션이 적용된 Bean을 Aspect로 사용 가능함
Advice의 종류
타깃에 부가기능(advice)를 실행하기 전, 후 or 앞뒤에 모두 적용할 것인지 등을 결정하는 것
Around 어드바이스 : Joinpoint 앞, 뒤에 실행되는 Advice
Before 어드바이스 : Joinpoint 앞에 실행되는 Advice
After Returning 어드바이스 : Joinpoint 메서드 호출이 정상적으로 종료된 뒤에 실행되는 Advice
After Throwing 어드바이스 : 예외가 던져질 때 실행되는 Advice
Advice를 정의하는 어노테이션
Advice를 정의하기 위하여 아래 어노테이션 제공
Before("pointcut")
타깃 객체의 메서드가 실행되기 전에 호출
Joinpoint를 통해 파라미터 정보 참조 가능
After("pointcut")
타깃 객체의 메서드가 정상 종료됐을 때와 예외가 발생했을 때 모두 호출하는 어드바이스
리턴겂이나 예외를 직접 전달받을 수는 없음
Arount("pointcut")
타깃 객체의 메서드가 호출되는 전 과정을 모두 담을 수 있는 가장 강력한 기능을 가진 어드바이스
CHM
팔로우
이전 포스트
AOP(Aspect Oriented Programming)
다음 포스트
트랜잭션
0개의 댓글
댓글 작성