부트에서의 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 이름으로 패턴을 지정한다.