- 일반적으로 AOP에서는 메서드 뿐 아니라 필드나 생성자, static 메서드 등 다양한 애플리케이션 실행 지점에 대한 특정 지점을 일컫는 개념이다.
- Aspect를 수행하는 메서드는 이 join point 인스턴스를 인자로 받게 되며, 이를 통해 메서드는 join point의 정보를 알아낼 수 있다.
- AOP를 지원하는 AspectJ 는 컴파일, 로딩 시점의 바이트 코드를 조작하므로 애플리케이션 모든 지점에서 적용이 가능하다.
- 다만 Spring AOP는 메서드 오버라이딩을 통한 프록시로 이를 구현하므로 join point가 메서드에 한정된다.
- Spring빈에 대해서만 프록시 객체를 만들어 Spring AOP를 적용할 수 있다.
JoinPoint 인터페이스의 주요 기능
이해보다는 사용법에 대한 것이므로 필요할 때 참고하자.
- JoinPoint.getArgs() : JoinPoint에 전달된 인자를 배열로 반환한다.
- JoinPoint.getThis() : AOP 프록시 객체를 반환한다.
- JoinPoint.getTarget() : AOP가 적용된 대상 객체를 반환한다.
- 클라이언트가 호출한 비즈니스 메소드를 포함하는 비즈니스 객체를 반환.
- JoinPoint.getSignature() : advice가 적용된 메서드에 대한 설명을 반환한다.
- 클라이언트가 호출한 메소드의 시그니처(리턴타입, 이름, 매개변수) 정보가 저장된 Signature 객체를 반환
Signature
- 객체가 선언하는 모든 연산은 연산의 이름, 매개변수로 받아들이는 객체들을 시그니처라고 합니다.
- Signature가 제공하는 메서드
- String getName() : 클라이언트가 호출한 메소드의 이름을 반환합니다.
- String toLongString() : 클라리언트가 호출한 메소드의 리턴타입, 이름, 매개변수를 패키지 경로까지 포함해서 반환합니다.
- String toShortString() : 클라이언트가 호출한 메소드 시그니처를 축약한 문자열로 반환합니다.
- JoinPoint.toString() : 조언되는 방법에 대한 유용한 설명을 인쇄합니다.
ProceedingJoinPoint 인터페이스의 주요 기능
- proceed() : 다음 어드바이스나 타켓을 호출합니다.