Gradle 라이브러리 적용하기

dependencies {
	implementation("org.springframework.boot:spring-boot-starter-aop")
    }

❄️ 최상위 클래스에 @EnableAspectJAutoProxy 설정하기

main이 있는 최상위 클래스에 어노테이션을 등록해 AOP(@Aspect)를 찾을 수 있게 해준다.

@EnableAspectJAutoProxy
@SpringBootApplication
class LoggingApplication

fun main(args: Array<String>) {
    runApplication<LoggingApplication>(*args)
}

❄️ 공통기능 정의하기

아래 코드는 단순히 로그를 출력해 주는 기능의 코드다.

@Aspect
@Component
class LogAspect {
     val log: Logger = LoggerFactory.getLogger(LogAspect::class.java)

      @Before("bean(*Controller)")
      fun beforeLog(joinPoint: JoinPoint) {
      	log.info("이름이 Controller로 끝나는 모든 @Bean 호출 전 실행되는 로그 입니다.")
      }

      @After("execution(* com.miot2j.service.*.*(..))
      fun beforeLog(joinPoint: JoinPoint) {
      	log.info("service 패키지내의 모든 메소드 호출 후 실행되는 로그 입니다.")
      }
}

❄️ PointCut 설정하기

JoinPoint라는 개념을 설명하기 전에 기본적인 AOP의 개념을 설명 하겠다.

위 코드에서 알 수 있듯이 @Before("bean(*Controller)") 와 같이PointCut을 이름이 Controller로 끝나는 모든 @Bean 호출 전 실행 으로 설정 할 수있다.

대표적인 PointCut 어노테이션은 다음과 같다