728x90
ํฌ์ธํธ์ปท ์ง์์ (Pointcut Designators)
์คํ๋ง์์๋ ํฌ์ธํธ์ปท ํํ์์์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค์ AspectJ ํฌ์ธํธ์ปท ์ง์์(PCD)๋ฅผ ์ง์ํฉ๋๋ค.
- execution: ๋ฉ์๋ ์คํ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ์คํ๋ง AOP์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/870)
- within: ํน์ ํ ํ์
๋ด์ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ถ๋ชจ ํ์ ์ ์ง์ ํ๋ฉด ์ ์ฉ๋์ง ์์ต๋๋ค.
- this: ์คํ๋ง ๋น ๊ฐ์ฒด(์คํ๋ง AOP ํ๋ก์)๋ฅผ ๋์์ผ๋ก ํ๋ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/878)
- 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)
within
ํน์ ํ ํ์ ๋ด์ ์กฐ์ธ ํฌ์ธํธ์ ๋ํ์ฌ ๋งค์นญํฉ๋๋ค.
๋ถ๋ชจ ํ์ ์ ์ง์ ํ๋ฉด ์ ์ฉ๋์ง ์์ต๋๋ค.
execution์์ ํ์ ๋ถ๋ถ๋ง ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ ๋ณผ ์ ์์ต๋๋ค.
์์ ์ฝ๋
package hello.advanced.aop.member
interface MemberService {
fun hello(param: String): String
}
package hello.advanced.aop.member
import org.springframework.stereotype.Component
@Component
class MemberServiceImpl : MemberService{
override fun hello(param: String): String {
return "ok"
}
fun internal(param: String): String {
return "ok"
}
}
package hello.advanced.pointcut
import hello.advanced.aop.member.MemberServiceImpl
import org.assertj.core.api.Assertions
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import org.springframework.aop.aspectj.AspectJExpressionPointcut
import java.lang.reflect.Method
class WithInTest {
val pointcut = AspectJExpressionPointcut()
lateinit var helloMethod: Method
@BeforeEach
fun init() {
helloMethod = MemberServiceImpl::class.java.getMethod("hello", String::class.java)
}
@Test
@DisplayName("ํ์
์ ๋ํ ๋งค์น - ์ ํํ ํ์
๋งค์นญ")
fun withinTest() {
pointcut.expression = "within(hello.advanced.aop.member.MemberServiceImpl)"
assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
@Test
@DisplayName("ํ์
์ ๋ํ ํจํด ๋งค์น")
fun withinTestV1() {
pointcut.expression = "within(hello.advanced.aop.member.*ber*vi*)"
assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
@Test
@DisplayName("ํ์
์ ๋ํ ๋งค์น - ํ์ ํจํค์ง ํฌํจ")
fun withinTestV2() {
pointcut.expression = "within(hello.advanced..*)"
assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
@Test
@DisplayName("ํ์
์ ๋ํ ๋งค์น - ์์ ํด๋์ค๋ก๋ ์ ์ฉ ๋ถ๊ฐ๋ฅ")
fun withinTestV3() {
pointcut.expression = "within(hello.advanced.aop.member.MemberService)"
assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isFalse
}
}
Reference
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-pointcuts
728x90
'๐๏ธ Spring > AOP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (4) - @target (0) | 2022.08.02 |
---|---|
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (3) - args (0) | 2022.08.02 |
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (1) - execution (0) | 2022.08.02 |
[AOP] ์คํ๋ง AOP ๊ตฌํ๋ฐฉ๋ฒ (0) | 2022.08.02 |
[AOP] @Aspect (0) | 2022.08.01 |