ํฌ์ธํธ์ปท ์ง์์ (Pointcut Designators)
์คํ๋ง์์๋ ํฌ์ธํธ์ปท ํํ์์์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค์ AspectJ ํฌ์ธํธ์ปท ์ง์์(PCD)๋ฅผ ์ง์ํฉ๋๋ค.
- execution: ๋ฉ์๋ ์คํ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ์คํ๋ง AOP์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/870)
- within: ํน์ ํ ํ์
๋ด์ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ถ๋ชจ ํ์ ์ ์ง์ ํ๋ฉด ์ ์ฉ๋์ง ์์ต๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/871)
- this: ์คํ๋ง ๋น ๊ฐ์ฒด(์คํ๋ง AOP ํ๋ก์)๋ฅผ ๋์์ผ๋ก ํ๋ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- target: target ๊ฐ์ฒด(์คํ๋ง AOP ํ๋ก์๊ฐ ๊ฐ๋ฆฌํค๋ ์ค์ ๋์)๋ฅผ ๋์์ผ๋ก ํ๋ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/879)
- args: ์ธ์๊ฐ, ์ฃผ์ด์ง ํ์
์ ์ธ์คํด์ค์ธ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/872)
- @target: ์คํ ๊ฐ์ฒด์ ํด๋์ค์, ์ฃผ์ด์ง ํ์
์ ์ ๋
ธํ
์ด์
์ด ์๋ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/873)
- @args: ์ ๋ฌ๋ ์ค์ ์ธ์์ ๋ฐํ์ ์์ ํ์
์ด, ์ฃผ์ด์ง ํ์
์ ์ ๋
ธํ
์ด์
์ ๊ฐ๋ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/876)
- @within: ์ฃผ์ด์ง ์ ๋
ธํ
์ด์
์ด ์๋ ํ์
๋ด ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/874)
- @annotation: ๋ฉ์๋๊ฐ ์ฃผ์ด์ง ์ ๋
ธํ
์ด์
์ ๊ฐ์ง๊ณ ์๋ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/875)
- bean : ์คํ๋ง ์ ์ฉ ํฌ์ธํธ์ปท ์ง์์๋ก, ๋น์ ์ด๋ฆ์ผ๋ก ํฌ์ธํธ์ปท์ ์ง์ ํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/877)
this
์คํ๋ง ๋น ๊ฐ์ฒด(์คํ๋ง AOP ํ๋ก์)๋ฅผ ๋์์ผ๋ก ํ๋ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
์กฐํํ๋ฉด ์ค์ ๊ฐ์ฒด๊ฐ ์๋ ํ๋ก์ ๊ฐ์ฒด๊ฐ ์กฐํ๋ฉ๋๋ค.
this์๋ ํ์ ํ๋๋ฅผ ์ ํํ๊ฒ ์ง์ ํด์ผ ํฉ๋๋ค.
์ฆ *๊ณผ ๊ฐ์ ํจํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ถ๋ชจ ํ์ ์ ํ์ฉ๋ฉ๋๋ค.
์์ ์ฝ๋
package hello.advanced.aop.member.anno
import kotlin.annotation.AnnotationRetention.RUNTIME
import kotlin.annotation.AnnotationTarget.*
@Target(CLASS)//ํด๋์ค์ ๋ถ์
@Retention(RUNTIME)
annotation class ClassAop()
ํด๋์ค์ ์ฌ์ฉํ ์ด๋ ธํ ์ด์ ์ ๋๋ค.
package hello.advanced.aop.member.anno
import kotlin.annotation.AnnotationRetention.*
import kotlin.annotation.AnnotationTarget.*
@Target(FUNCTION
@Retention(RUNTIME)
annotation class MethodAop(
val value: String
)
๋ฉ์๋์ ์ฌ์ฉํ ์ด๋ ธํ ์ด์ ์ ๋๋ค.
package hello.advanced.aop.member
interface MemberService {
fun hello(param: String): String
}
package hello.advanced.aop.member
import hello.advanced.aop.member.anno.ClassAop
import hello.advanced.aop.member.anno.MethodAop
import org.springframework.stereotype.Component
@ClassAop
@Component
class MemberServiceImpl : MemberService{
@MethodAop("test value")
override fun hello(param: String): String {
return "ok"
}
fun internal(param: String): String {
return "ok"
}
}
package hello.advanced.pointcut
import hello.advanced.aop.member.MemberService
import org.aspectj.lang.JoinPoint
import org.aspectj.lang.annotation.Aspect
import org.aspectj.lang.annotation.Before
import org.aspectj.lang.annotation.Pointcut
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.stereotype.Component
@SpringBootTest
class ParamTest(
@Autowired val memberService: MemberService
) {
@Test
fun success() {
println("memberService Proxy=${memberService.javaClass}")
memberService.hello("helloA")
}
}
@Aspect
@Component
class ParameterAspect {
@Pointcut("execution(* hello.advanced.aop.member..*.*(..))")
fun allMember() {}
@Before("allMember() && this(obj) ")
fun thisArgs(joinPoint: JoinPoint, obj: MemberService) {//๋์ ํด๋์ค ํ์
์ง์ ์ง์ ๊ฐ๋ฅ
//== this๋ ์คํ๋ง์ ๋ฑ๋ก๋ ํ๋ก์ ๊ฐ์ฒด๊ฐ ์ถ๋ ฅ ==//
println("[this] ${joinPoint.signature}, obj = ${obj.javaClass}")
}
}
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ค์ ๊ฐ์ฒด๊ฐ ์๋ ํ๋ก์ ๊ฐ์ฒด๊ฐ ์กฐํ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
this ์ target์ ์ฐจ์ด
์คํ๋ง์์ AOP๋ฅผ ์ ์ฉํ๋ฉด ์ค์ target ๊ฐ์ฒด ๋์ ํ๋ก์ ๊ฐ์ฒด๊ฐ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋ฉ๋๋ค.
this๋ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋์ด ์๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ํฌ์ธํธ์ปท์ ๋งค์นญํฉ๋๋ค.
target์ ์ค์ target ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ํฌ์ธํธ์ปท์ ๋งค์นญํฉ๋๋ค.
Reference
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-pointcuts
'๐๏ธ Spring > AOP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (11) - ํฌ์ธํธ์ปท์์ ๋งค๊ฐ๋ณ์ ์ ๋ฌ (0) | 2022.08.03 |
---|---|
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (10) - target (0) | 2022.08.02 |
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (8) - bean (0) | 2022.08.02 |
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (7) - @args (0) | 2022.08.02 |
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (6) - @annotation (0) | 2022.08.02 |