Spring AOP의 기본 개념
어떠한 로직을 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 모듈화 한다는 뜻
각 관점을 기준으로 모듈화 한다는 것은 코드들을 부분적으로 모듈화 하겠다는 것이다. 이때 소스코드상 흩어져 반복되는 코드들을 흩어진 관심사 (crosscutting concerns)라 한다.
예시)
클래스 A, B, C에서 부분적으로 반복되는 로직들을 Aspect X, Y, Z로 모듈화
@Component
class A () {
@Annotation
fun X () {}
fun inside () {
X() // Aspect does not working
}
}
@Component
class B () {
fun outside () {
X() // working normally
}
}
@Aspect
@Component
class SampleAspect () {
@Around("@Annotation")
fun around () {
// Do Something
}
}
Aspect내의 method 앞에 annotation을 정의함으로서 언제 Aspect가 실행될지 지정할 수 있다.
// build.gradle.kts
implementation("org.springframework.boot:spring-boot-starter-aop")
import org.aspectj.lang.annotation.Aspect
import org.springframework.stereotype.Component
@Aspect
@Component
class SampleAspect () {
@Around("...") // 함수, annotation, 범위 등 지정가능
fun around() {
//
}
}