Spring Boot; AOP

🗓️

부트에서의 AOP

  • 스프링 부트에서의 AOP도 역시 마찬가지로 적용할 수 있다.
  • slf4j 로깅을 aspect로 등록하는 코드.
// webboard.aop.LoggerAspect.class
@Component
@Aspect
@Slf4j
public class LoggerAspect {

    @Around("execution(* org.platanus.webappboard..controller.*Controller.*(..)) or"
        + "execution(* org.platanus.webappboard..service.*Implement.*(..)) or"
        + "execution(* org.platanus.webappboard..dao.*Mapper.*(..))")
    public Object logPoint(ProceedingJoinPoint joinPoint) throws Throwable {
        String type = "";
        String name = joinPoint.getSignature().getDeclaringTypeName();
        if (name.indexOf("Controller") > -1) {
            type = "Controller \t:";
        } else if (name.indexOf("Service") > -1) {
            type = "ServiceImplement \t:";
        } else if (name.indexOf("Mapper") > -1) {
            type = "Mapper \t\t:";
        }
        log.debug(type + name + "." + joinPoint.getSignature().getName() + "()");
        return joinPoint.proceed();
    }

}

예제로써 보자.. 모르는 내가 봐도 좋은 코드는 아닌 것같음. 책에 또 코드 빠져있음….

  • 따로 bean등록을 하지 않았기 때문에 component scan으로 잡는다.
  • AOP를 사용하기 위해 Aspect 어노테이션을 붙인다.
  • Slf4j 어노테이션으로 slf4j 객체를 주입받는다. (log)
  • Around로 aspect가 작동할 범위를 execution 필터 지정한다.

추가적인 filter

  • execution : 하위 또는 지정된 클래스나 메소드에 필터를 지정한다.
  • within : 특정 타입에 속하는 메서드를 지정한다.
  • bean : bean 이름으로 패턴을 지정한다.

🏷️