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());
	}

}

 

반응형