language/Spring
[Java/Spring] JoinPoint와 바인드 변수
zincah
2022. 3. 20. 21:32
반응형
JoinPoint 인터페이스 : 횡단관심에 해당하는 어드바이스 메서드를 의미 있게 구현하기 위해 클라이언트가 호출한 비즈니스 메서드의 정보가 필요하기 때문에 사용
JoinPoint 메서드
메서드 | 설명 |
Signature getSignature() | 클라이언트가 호출한 메서드의 시그니처(리턴타입, 이름, 매개변수) 정보가 저장된 Signature 객체를 리턴 |
Object getTarget() | 클라이언트가 호출한 비즈니스 메서드를 포함하는 비즈니스 객체 리턴 |
Object getArgs() | 클라이언트가 메서드를 호출할 때 넘겨준 인자 목록을 Object 배열로 리턴 |
- Before, After Returning, After Throwing, After 어드바이스는 JoinPoint를 사용하고 Around 에서만 ProceedingJoinPoint를 매개변수로 사용한다. (around 어드바이스에서만 proceed() 함수가 필요하기 때문)
Signature 제공하는 메서드
메서드 | 설명 |
String getName() | 클라이언트가 호출한 메서드 이름을 리턴 |
String toLongString() | 클라이언트가 호출한 메서드의 리턴타입, 이름, 매개변수를 패키지 경로까지 포함하여 리턴 |
String toShortString() | 클라이언트가 메서드를 메서드 시그니처를 축약한 문자열로 리턴 |
- xml 파일에 설정 후에 출력해볼 때 (메서드 실행 전 처리되게 advice를 before로 주었습니다.)
package zinc.spring.web.common;
import java.security.Signature;
import org.aspectj.lang.JoinPoint;
public class BeforeAdvice {
public void beforeLog(JoinPoint joinPoint) {
String method = joinPoint.getSignature().getName(); // 메서드 명
Object[] args = joinPoint.getArgs(); // 메서드 호출 시 넘겨준 인자 목록
Object target = joinPoint.getTarget(); // 비즈니스 객체
// signature 정보 리턴
System.out.println("Signature : " + joinPoint.getSignature().toLongString());
System.out.println("Signature : " + joinPoint.getSignature().toShortString());
// 비즈니스 객체 리턴
System.out.println("target : " + target.toString());
System.out.println("[사전처리] : " + method + "()메서드의 ARGS 정보 : " + args[0].toString());
}
}

반응형