JoinPoint
스프링 AOP
Joinpoint method는 어드바이스 종류에 따라 사용방법이 다르지만, 기본적으로 어드바이스 메서드에 매개변수만 선언하면 됨
JoinPoint 인터페이스 메서드 종류
@Slf4j
@Aspect
@Component
public class SimpleLogAop {
@Before("execution(* com.aop.controller..*.*(..))")
public void beforeParameterLog(JoinPoint joinPoint) {
// 메서드 정보 받아오기
Method method = getMethod(joinPoint);
log.info("======= method name = {} =======", method.getName());
// 파라미터 받아오기
Object[] args = joinPoint.getArgs();
if (args.length <= 0) log.info("no parameter");
for (Object arg : args) {
log.info("parameter type = {}", arg.getClass().getSimpleName());
log.info("parameter value = {}", arg);
}
}
@AfterReturning(value = "cut()", returning = "returnObj")
public void afterReturnLog(JoinPoint joinPoint, Object returnObj) {
// 메서드 정보 받아오기
Method method = getMethod(joinPoint);
log.info("======= method name = {} =======", method.getName());
log.info("return type = {}", returnObj.getClass().getSimpleName());
log.info("return value = {}", returnObj);
}
private Method getMethod(JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
return signature.getMethod();
}
}
ProceedingJoinPoint 인터페이스
@Around("execution(public * com.sparta.springcore.controller..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
// 앞에서 부가 기능 수행
// 핵심기능 수행
Object output = joinPoint.proceed(); // 들어온 요청을 controller 로 보냄
// 뒤에서 부가 기능 수행 가능
return output; // controller 에서 처리된 요청을 반환
}