AOP 적용 위치
- AOP는 지금까지 학습한 메서드 실행 위치뿐만 아니라 다음과 같은 다양한 위치에 적용할 수 있습니다.
- 적용 가능 지점(조인 포인트): 생성자, 필드 값 접근, static 메서드 접근, 메서드 실행
- AOP를 수행하는 메서드는 이 JoinPoint 인스턴스를 인자로 받게 됩니다.
- JoinPoint 인스턴스에서 조인 포인트 지점의 정보를 얻어내야 합니다.
조인 포인트(Join Point)
조인 포인트(JoinPoint)는 추상적인 개념이고, AOP(Aspect Oriented Programming)를 적용할 수 있는 지점을 의미합니다.
- 어드바이스가 적용될 수 있는 위치, 메서드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점을 나타냅니다.
- AspectJ를 사용해서 컴파일 시점과 클래스 로딩 시점에 적용하는 AOP는 바이트코드를 실제 조작하기 때문에 해당 기능을 모든 지점에 다 적용할 수 있습니다.
- 프록시 방식을 사용하는 스프링 AOP는 메서드 실행 지점에만 AOP를 적용할 수 있습니다.
- 프록시는 메서드 오버라이딩 개념으로 동작합니다.
- 생성자나 static 메서드, 필드 값 접근에는 프록시 개념이 적용될 수 없습니다.
- 프록시를 사용하는 스프링 AOP의 조인 포인트는 메서드 실행으로 제한됩니다.
- 프록시 방식을 사용하는 스프링 AOP는 스프링 컨테이너가 관리할 수 있는 스프링 빈에서만 AOP를 적용할 수 있습니다.
- 조인 포인트 메서드는 어드바이스의 종류에 따라 사용 방법이 다소 다르지만 기본적으로 어드바이스 메서드에 매개변수로 선언만 하면 됩니다.
조인 포인트 인터페이스의 주요 기능
- JoinPoint.getArgs() : JoinPoint에 전달된 인자를 배열로 반환합니다.
- JoinPoint.getThis() : AOP 프록시 객체를 반환합니다.
- JoinPoint.getTarget() : AOP가 적용된 대상 객체를 반환합니다.
- 클라이언트가 호출한 비즈니스 메서드를 포함하는 비즈니스 객체를 반환합니다.
- JoinPoint.getSignature() : 조언되는 메서드에 대한 설명을 반환합니다.
- 클라이언트가 호출한 메서드의 시그니처(리턴타입, 이름, 매개변수) 정보가 저장된 Signature 객체를 반환합니다
- Signature
- 객체가 선언하는 모든 메서드에서 메서드의 이름, 매개변수를 담고 있는 객체들을 시그니처라고 합니다.
- Signature가 제공하는 메서드
- String getName() : 클라이언트가 호출한 메서드의 이름을 반환합니다.
- String toLongString() : 클라리언트가 호출한 메서드의 리턴타입, 이름, 매개변수를 패키지 경로까지 포함해서 반환합니다.
- String toShortString() : 클라이언트가 호출한 메소드 시그니처를 축약한 문자열로 반환합니다.
- JoinPoint.toString() : 조언되는 방법에 대한 유용한 설명을 인쇄합니다.
ProceedingJOinPoint 인터페이스의 주요 기능
proceed(): 다음 어드바이스나 타겟을 호출합니다.
'Spring' 카테고리의 다른 글
[Spring] 포인트컷(Pointcut) 표현식 (0) | 2023.04.12 |
---|---|
[Spring] 타입별 어드바이스(Advice) (0) | 2023.04.12 |
[Spring] AOP(Aspect Oriented Programming) 용어 및 개념들 (0) | 2023.04.11 |
[Spring] AOP(Aspect Oriented Programming)가 필요한 이유 (0) | 2023.04.11 |
[Spring] DI(Dependency Injection) 종합 실습 (0) | 2023.04.10 |