์ด๋๋ฐ์ด์ค์ ์ข ๋ฅ
๋ํ์ ์ธ ์ด๋๋ฐ์ด์ค๋ก๋ @Around๊ฐ ์ฌ์ฉ๋์ง๋ง, ์ด์ธ์๋ ๋ค๋ฅธ ์ด๋๋ฐ์ด์ค๋ค์ด ์กด์ฌํฉ๋๋ค.
- @Around
- @Before
- @AfterReturning
- @AfterThrowing
- @After
@Around
๋ฉ์๋ ํธ์ถ ์ ํ์ ์ํ๋๋ ์ด๋๋ฐ์ด์ค๋ก, ๊ฐ์ฅ ๊ฐ๋ ฅํฉ๋๋ค.
์กฐ์ธ ํฌ์ธํธ์ ์คํ ์ฌ๋ถ์, ์คํ ํ์, ๋ฐํ ๊ฐ์ ๋ณํ๊ณผ ์์ธ ๋ณํ ๋ฑ์ ์ฌ๋ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
@Before
์กฐ์ธ ํฌ์ธํธ ์คํ ์ด์ ์ ์คํ๋๋ ์ด๋๋ฐ์ด์ค์ ๋๋ค.
@AfterReturning
์กฐ์ธ ํฌ์ธํธ๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋ ํ ์คํ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ @Around์๋ ๋ฌ๋ฆฌ ๊ฐ์ ๋ฐํ๋๋ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค. (์กฐ์์ ๊ฐ๋ฅํฉ๋๋ค.)
@AfterThrowing
์กฐ์ธ ํฌ์ธํธ๊ฐ ์์ธ๋ฅผ ๋์ง๋ ๊ฒฝ์ฐ์ ์คํ๋ฉ๋๋ค.
@After
์กฐ์ธ ํฌ์ธํธ๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋์๋ ์์ธ๋ฅผ ๋์ง๋ ๊ด๊ณ์์ด ์คํ๋ฉ๋๋ค.
์ฌ์ฉ ์์
@Aspect
@Component
class AspectAdvice {
@Around("execution(* hello.advanced.aop..*.*(..))")
fun doTransaction(joinPoint: ProceedingJoinPoint): Any? {
try {
//@Before
println("[@Around][ํธ๋์ญ์
์์]")
var result = joinPoint.proceed()
//@AfterReturning
println("[@Around][ํธ๋์ญ์
์ปค๋ฐ] result=${result}")
return result
} catch (e: Exception) {
//@AfterThrowing
println("[@Around][ํธ๋์ญ์
๋กค๋ฐฑ] ex = ${e}")
throw e
} finally {
//@After
println("[@Around][๋ฆฌ์์ค ๋ฆด๋ฆฌ์ฆ]")
}
}
@Before("execution(* hello.advanced.aop..*.*(..))")
fun doBefore(joinPoint: JoinPoint) {
println("[@Before]")
}
@AfterReturning("execution(* hello.advanced.aop..*.*(..))", returning = "result")
fun doAfterReturning(joinPoint: JoinPoint, result: Any?) {
println("[@AfterReturning] result=${result}")
}
@AfterThrowing("execution(* hello.advanced.aop..*.*(..))", throwing = "error")
fun doAfterThrowing(joinPoint: JoinPoint, error: Exception) {
println("[@AfterThrowing] ex = ${error}}")
}
@After("execution(* hello.advanced.aop..*.*(..))")
fun doAfter(joinPoint: JoinPoint) {
println("[@After]")
}
}
@Component
class TestService() {
fun test(){
println("HI")
}
}
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์คํ ์์
- @Around
- @Before
- @After
- @AfterReturning
- @AfterThrowing
JoinPoint์ ProceedingJoinPoint์ ์ฐจ์ด
๋ชจ๋ ์ด๋๋ฐ์ด์ค๋ JoinPoint๋ฅผ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. (์๋ต์ ๊ฐ๋ฅํ์ง๋ง ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก๋ ์ฌ์ฉํ ์ ์์ต๋๋ค)
๊ทธ๋ฌ๋ @Around๋ ProceedingJoinPoint๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ProceedingJoinPoint๋ JoinPoint์ ํ์ ํ์ ์ผ๋ก, ์ฃผ์ํ ๊ธฐ๋ฅ์ด ํ๋ ์ถ๊ฐ๋ฉ๋๋ค.
JoinPoint์ ๊ธฐ๋ฅ
- getArgs() : ๋ฉ์๋ ์ธ์๋ฅผ ๋ฐํํฉ๋๋ค.
- getThis() : ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
- getTarget() : ๋์ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
- getSignature() : ์กฐ์ธ๋๋ ๋ฉ์๋์ ๋ํ ์ค๋ช ์ ๋ฐํํฉ๋๋ค.
- toString() : ์กฐ์ธ๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์ฉํ ์ค๋ช ์ ์ธ์ํฉ๋๋ค.
ProceedingJoinPoint์ ๊ธฐ๋ฅ
- proceed() : ๋ค์ ์ด๋๋ฐ์ด์ค๋ ํ๊ฒ(์ค์ ๊ฐ์ฒด)์ ํธ์ถํฉ๋๋ค.
'๐๏ธ Spring > AOP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (11) - ํฌ์ธํธ์ปท์์ ๋งค๊ฐ๋ณ์ ์ ๋ฌ (0) | 2022.08.03 |
---|---|
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (10) - target (0) | 2022.08.02 |
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (9) - this (0) | 2022.08.02 |
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (8) - bean (0) | 2022.08.02 |
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (7) - @args (0) | 2022.08.02 |