스프링 3대 요소 중 하나인 AOP
프록시 방식을 사용하는 스프링 AOP는 스프링 컨테이너가 관리할 수 있는 스프링 빈에만 AOP를 적용할 수 있다.
스프링은 AspectJ의 문법을 차용하고 프록시 방식의 AOP를 적용한다
@Slf4j
@Aspect
@Component
public class LogIntroduction {
@Pointcut("execution(* com.dragonguard.backend..*Controller*.*(..))")
public void allController() {
}
@Pointcut("execution(* com.dragonguard.backend..*Service*.*(..))")
public void allService() {
}
@Pointcut("execution(* com.dragonguard.backend..*Repository*.*(..))")
public void allRepository() {
}
@Before("allController()")
public void controllerLog(JoinPoint joinPoint) {
log.info(
"METHOD : {}, ARGS : {}",
joinPoint.getSignature().toShortString(),
joinPoint.getArgs());
}
@Before("allService() || allRepository()")
public void serviceAndRepositoryLog(JoinPoint joinPoint) {
log.debug(
"METHOD : {}, ARGS : {}",
joinPoint.getSignature().toShortString(),
joinPoint.getArgs());
}
}