💡 오늘의 학습목표
📔 Pointcut 표현식 & 지시자
- 관심 조인 포인트를 결정하므로 어드바이스가 실행되는 시기를 제어
AspectJ 는 포인트컷을 위한 특별한 표현식 제공
ex)
@Pointcut("excution(* transfer(..))")
private void anyOldTransfer() {}
📖 포인트컷 지시자
- 포인트컷 표현식은 execution 과 같은 포인트컷 지시자로 시작한다.
- 포인트컷 지시자
- execution : 메서드 실행 조인 포인트를 매칭
- within : 특정 타입 내의 조인 포인트 매칭
- args : 인자가 주어진 타입의 인스턴스인 조인 포인트
- this : 스프링 빈 객체(스프링 AOP프록시)를 대상으로 하는 조인 포인트
- target : Target 객체 (스프링 AOP프록시가 가르키는 실대상)을 대상으로 한 조인포인트
- @target / @whthin / @annotation / @args / bean
📖 Pointcut 표현식 결합
&&, \\, !
을 사용하여 결합 가능 / 이름으로 표현식을 참조할 수도 있다.
@Pointcut("execution(public * *(..))")
private void anyPublicOperation() {}
@Pointcut("within(com.xyz.myapp.trading..*)")
private void inTrading() {}
@Pointcut("anyPublicOperation() && inTrading()")
private void tradingOperation() {}
📖 일반적인 pointcut 표현식들
execution(public * *(..))
: 모든 공개메서드 실행
execution(* set*(..))
: set 다음 이름으로 시작하는 모든 메서드 실행
execution(* com.xyz.service.AccountService.*(..))
: AccountService 인터페이스에 의해 정의된 모든 메소드의 실행
execution(* com.xyz.service.*.*(..))
: service 패키지에 정의된 메서드 실행
whthin(com.xyz.service.*)
: service 패키지 내의 모든 조인 포인트 (SpringAOP에서만 메서드 실행)
📔 JoinPoint
- 적용 가능 지점(조인포인트) : 생성자, 필드 값 접근, static메서드 접근, 메서드 실행
- AOP를 수행하는 메소드는 조인포인트 인스턴스를 인자로 받는다.
- 조인포인트 인스턴스에서 조인포인트 지점의 정보를 얻어내야한다.
- 조인포인트는 추상개념, AOP를 적용할 수 있는 지점을 의미
- JoinPoint 인터페이스의 주요 기능
- JoinPoint.getArgs() : 조인포인트에 전달된 인자를 배열로 반환
- JoinPoint.getThis() : AOP프록시 객체를 반환
- JoinPoint.getTarget() : AOP가 적용된 대상 객체를 반환
- 클라이언트가 호출한 비즈니스 메소드를 초함하는 비즈니스 객체를 반환
- JoinPoint.getSignatuer() : 조인되는 메서드에 대한 설명 반환
- JoinPoint.toString() : 조인되는 방법에 대한 유용한 설명을 인쇄
- ProceedingJoinPoint 인터페이스의 주요 기능
- proceed() : 다음 어드바이스나 타겟을 호출
📔 애너테이션을 이용한 AOP
@AspectJ 지원
- 애너테이션이 있는 일반 Java 클래스로 관점을 선언하는 스타일
- @AspectJ 지원 활성화
- Spring 설정에서 사용하려면 자동 프록시 빈에 대한 Spring 지원을 활성화해야 함.
- Java 설정으로 @AspectJ 지원 활성화 방법
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
}
- XML 설정으로 @AspectJ 지원 활성화 방법
<aop:aspectJ-autoproxy/>
- Aspect 선언
- 지원이 활성화되면 @AspectJ 관점이 있는(@Aspect 애너테이션이 있는) 클래스로 애플리케이션 컨텍스트에 정의된 모든 빈이 Spring에서 자동으로 감지되고 AOP를 구성하는데 사용
- 포인트컷 선언
- 포인트컷은 관심 조인 포인트를 결정하므로 어드바이스가 실행되는 시기를 제어할 수 있다.
- pointcut 표현식은
@Pointcut
어노테이션을 사용하여 표시
- 어드바이스 선언
- 어드바이스는 포인트컷 표현식과 연관되며 포인트컷과 일치하는 메서드 실행 전후 또는 전후에 실행