ํฌ์ธํธ์ปท ์ง์์ (Pointcut Designators)
์คํ๋ง์์๋ ํฌ์ธํธ์ปท ํํ์์์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค์ AspectJ ํฌ์ธํธ์ปท ์ง์์(PCD)๋ฅผ ์ง์ํฉ๋๋ค.
- execution: ๋ฉ์๋ ์คํ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ์คํ๋ง AOP์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
- within: ํน์ ํ ํ์
๋ด์ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
- ๋ถ๋ชจ ํ์ ์ ์ง์ ํ๋ฉด ์ ์ฉ๋์ง ์์ต๋๋ค.
- ๋ค์์ ์ฐธ๊ณ - (https://ttl-blog.tistory.com/871)
- 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)
์์๋ฅผ ์ํ ์ฝ๋
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"
}
}
class ExecutionTest {
val log = logger<ExecutionTest>()
val pointcut = AspectJExpressionPointcut()
lateinit var helloMethod: Method
@BeforeEach
fun init() {
helloMethod = MemberServiceImpl::class.java.getMethod("hello", String::class.java)
}
@Test
fun printMethod() {
//helloMethod={public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)}
log.info("helloMethod={${helloMethod}}")
}
}
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
execution
๋ฉ์๋ ์คํ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํฉ๋๋ค.
๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern.?name-pattern(param-pattern) throws-pattern?)
execution(์ ๊ทผ ์ ์ด์? ๋ฐํ ํ์ ์ ์ธ ํ์ .?๋ฉ์๋์ด๋ฆ(ํ๋ผ๋ฏธํฐ) ์์ธ?)
?๋ ์๋ต์ด ๊ฐ๋ฅํ ์ค์ ์ ๋๋ค.
*๋ก ์๊ด ์์ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค. (ํ๋ผ๋ฏธํฐ์ ๊ฒฝ์ฐ์๋ ..์ผ๋ก ์๊ด ์์ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.)
์์ ํ์์ ๋ฐ๋ก ์ง์ ํ ์คํธ์ฝ๋์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋์จ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
๊ฐ์ฅ ์ ํํ ๋งค์นญ
package hello.advanced.pointcut
import hello.advanced.aop.member.MemberServiceImpl
import hello.advanced.logger
import org.assertj.core.api.Assertions
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
/**
* Created by ShinD on 2022/08/02.
*/
class ExecutionTest {
val log = logger<ExecutionTest>()
val pointcut = AspectJExpressionPointcut()
lateinit var helloMethod: Method
@BeforeEach
fun init() {
helloMethod = MemberServiceImpl::class.java.getMethod("hello", String::class.java)
}
@Test
@DisplayName("๊ฐ์ฅ ์ ํํ ํฌ์ธํธ์ปท")
fun exactMatch() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(public String hello.advanced.aop.member.MemberServiceImpl.hello(String))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
}
์ ๊ทผ ์ ์ด์? : public
๋ฐํ ํ์ : String
์ ์ธ ํ์ .? : hello.advanced.aop.member.MemberServiceImpl
๋ฉ์๋์ด๋ฆ : hello
(ํ๋ผ๋ฏธํฐ) : (String)
์์ธ? : ์๋ต(์์ผ๋ฏ๋ก)
๊ฐ์ฅ ๋ง์ด ์๋ตํ ๋งค์นญ
@Test
@DisplayName("๊ฐ์ฅ ๋ง์ด ์๋ตํ ํฌ์ธํธ์ปท")
fun skipMatch() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* *(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
์ ๊ทผ ์ ์ด์? : ์๋ต
๋ฐํ ํ์ : *
์ ์ธ ํ์ .? : ์๋ต
๋ฉ์๋์ด๋ฆ : *
(ํ๋ผ๋ฏธํฐ) : .. (ํ๋ผ๋ฏธํฐ์ ํ์ ๊ณผ ์๊ฐ ์๊ด์์)
์์ธ? : ์๋ต
๋ฉ์๋ ์ด๋ฆ ๋งค์นญ
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : hello
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("๋ฉ์๋ ์ด๋ฆ ๋งค์น - ๋์ผํ ์ด๋ฆ")
fun methodNameMatch() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hello(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : hel*
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("๋ฉ์๋ ์ด๋ฆ ๋งค์น - ํจํด ๋งค์นญ V1")
fun methodNameMatchV1() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hel*(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : *llo
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("๋ฉ์๋ ์ด๋ฆ ๋งค์น - ํจํด ๋งค์นญ V2")
fun methodNameMatchV2() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* *llo(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : *el*
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("๋ฉ์๋ ์ด๋ฆ ๋งค์น - ํจํด ๋งค์นญ V3")
fun methodNameMatchV3() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* *el*(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : h*l*
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("๋ฉ์๋ ์ด๋ฆ ๋งค์น - ํจํด ๋งค์นญ V4")
fun methodNameMatchV4() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* h*l*(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : h*o
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("๋ฉ์๋ ์ด๋ฆ ๋งค์น - ํจํด ๋งค์นญ V5")
fun methodNameMatchV5() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* h*o(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
ํจํค์ง ์ด๋ฆ ๋งค์นญ
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : hello.advanced.aop.member.MemberServiceImpl
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํจํค์ง ์ด๋ฆ ๋งค์น - ๋์ผํ ์ด๋ฆ")
fun packageNameMatch() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hello.advanced.aop.member.MemberServiceImpl.*(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : hello.advanced.aop.member.*
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํจํค์ง ์ด๋ฆ ๋งค์น - ํจํค์ง ๋ด๋ถ ๋ชจ๋ ํฌํจ")
fun packageNameMatchV1() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hello.advanced.aop.member.*.*(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : hello.advanced.aop.*
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํจํค์ง ์ด๋ฆ ๋งค์น - ํจํค์ง ์์๋ง ์ง์ ํด์ฃผ๋ฉด ํ์ ํจํค์ง์ ๋ํด์๋ ์ ์ฉ ์คํจ")
fun packageNameMatchV2() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hello.advanced.aop.*.*(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isFalse
//isFalse ์ฃผ์!!
//isFalse ์ฃผ์!!
//isFalse ์ฃผ์!!
//isFalse ์ฃผ์!!
//isFalse ์ฃผ์!!
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : hello.advanced.aop..* : ..์ ์ฌ์ฉํ์ฌ ํ์ ํจํค์ง ํฌํจ
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํจํค์ง ์ด๋ฆ ๋งค์น - ํ์ ํจํค์ง ํฌํจ ๋ฐฉ๋ฒ")
fun packageNameMatchV3() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hello.advanced.aop..*.*(..))"
//hello.advanced.aop ์ ๊ทธ ํ์ ํจํค์ง ๋ชจ๋ ํฌํจ
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : he*o.*vance*.*ao*p*.*.*
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํจํค์ง ์ด๋ฆ ๋งค์น - ํจํด ๋งค์น")
fun packageNameMatchV4() {
//public java.lang.String he[*]o.[*]vance[*].[*]ao[*]p[*].member(== *).MemberServiceImpl(== *).hello(== *)(java.lang.String)
pointcut.expression = "execution(* he*o.*vance*.*ao*p*.*.*.*(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
ํจํค์ง ๋งค์น์์ .๊ณผ ..์ ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค.
.์ ์ ํํ๊ฒ ํด๋น ์์น์ ํจํค์ง๋ฅผ ์๋ฏธํ๋ฉฐ,
..์ ํด๋น ์์น์ ํจํค์ง์ ๊ทธ ํ์ ํจํค์ง๋ ํฌํจํฉ๋๋ค.
ํ์ ๋งค์นญ
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : hello.advanced.aop.member.MemberServiceImpl
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ์
๋งค์น")
fun typeMatch() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hello.advanced.aop.member.MemberServiceImpl.*(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : hello.advanced.aop.member.MemberService
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ์
๋งค์น - ์์ ํ์
ํ์ฉ")
fun typeMatchV1() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hello.advanced.aop.member.MemberService.*(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : hello.advanced.aop.member.MemberService
* ๋ฉ์๋์ด๋ฆ : internal
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ์
๋งค์น - ์์ ํ์
๋งค์น ์ ์์ ํ์
์ ์๋ ๋ฉ์๋๋ ํ์ฉ X")
fun typeMatchV2() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hello.advanced.aop.member.MemberService.internal(..))"
val internalMethod = MemberServiceImpl::class.java.getMethod("internal", String::class.java)
Assertions.assertThat(pointcut.matches(internalMethod, MemberServiceImpl::class.java)).isFalse
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : hello.advanced.aop.member.MemberServiceImpl
* ๋ฉ์๋์ด๋ฆ : internal
* (ํ๋ผ๋ฏธํฐ) : ..
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ์
๋งค์น - ํ์ ํ์
์๋ง ์๋ ๋ฉ์๋๋ ํ์ฉ")
fun typeMatchV3() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* hello.advanced.aop.member.MemberServiceImpl.internal(..))"
val internalMethod = MemberServiceImpl::class.java.getMethod("internal", String::class.java)
Assertions.assertThat(pointcut.matches(internalMethod, MemberServiceImpl::class.java)).isTrue
}
๋ถ๋ชจ ํ์ ์ผ๋ก ์ ์ฉ ์ ๋ถ๋ชจ ํ์ ์ ์๋ ๋ฉ์๋์ ๋ํด์๋ง ์ ์ฉ๋ฉ๋๋ค.
ํ๋ผ๋ฏธํฐ ๋งค์น
๋ถ๋ชจ ํ์ ์ ํ๋ผ๋ฏธํฐ๋ ํ์ฉ๋์ง ์์ต๋๋ค.
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : (..)
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ๋ผ๋ฏธํฐ ๋งค์น - ์ซ์์ ๋ฌด๊ดํ๊ฒ ๋ชจ๋ ํ๋ผ๋ฏธํฐ, ๋ชจ๋ ํ์
ํ์ฉ ")
fun paramMatch() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* *(..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : ()
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ๋ผ๋ฏธํฐ ๋งค์น - ํ๋ผ๋ฏธํฐ ์๋ ๊ฒฝ์ฐ๋ง ๋งค์น")
fun paramMatchV1() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* *())"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isFalse
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : (*)
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ๋ผ๋ฏธํฐ ๋งค์น - ์ ํํ ํ๋์ ํ๋ผ๋ฏธํฐ, ๋ชจ๋ ํ์
์ ํ๋ผ๋ฏธํฐ ํ์ฉ")
fun paramMatchV2() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* *(*))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : (String, ..)
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ๋ผ๋ฏธํฐ ๋งค์น - String์ ๋งจ ์ฒ์์ ํ๋ ๋ฐ๊ณ , ์ดํ ๊ฐ์์ ํ์
์ ๋ฌด๊ดํ ํ๋ผ๋ฏธํฐ ํ์ฉ)")
fun paramMatchV3() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* *(String, ..))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isTrue()
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : (*, *)
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ๋ผ๋ฏธํฐ ๋งค์น - ์๋ฌด ํ์
๋ฑ ๋๊ฐ์ ํ๋ผ๋ฏธํฐ ํ์ฉ)")
fun paramMatchV4() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* *(*, *))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isFalse
}
/**
* ์ ๊ทผ ์ ์ด์? : ์๋ต
* ๋ฐํ ํ์
: *
* ์ ์ธ ํ์
? : ์๋ต
* ๋ฉ์๋์ด๋ฆ : *
* (ํ๋ผ๋ฏธํฐ) : (Object) : Any๋ ์๋จ
* ์์ธ? : ์๋ต
*/
@Test
@DisplayName("ํ๋ผ๋ฏธํฐ ๋งค์น - ์์ ํ์
์ผ๋ก ๋งค์น ๋ถํ์ฉ)")
fun paramMatchV5() {
//public java.lang.String hello.advanced.aop.member.MemberServiceImpl.hello(java.lang.String)
pointcut.expression = "execution(* *(Object))"
Assertions.assertThat(pointcut.matches(helloMethod, MemberServiceImpl::class.java)).isFalse
}
Reference
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-pointcuts
'๐๏ธ Spring > AOP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (3) - args (0) | 2022.08.02 |
---|---|
[AOP] AOP ํฌ์ธํธ์ปท ํํ์ (2) - within (0) | 2022.08.02 |
[AOP] ์คํ๋ง AOP ๊ตฌํ๋ฐฉ๋ฒ (0) | 2022.08.02 |
[AOP] @Aspect (0) | 2022.08.01 |
[AOP] ๋น ํ์ฒ๋ฆฌ๊ธฐ(BeanPostProccessor)์AnnotationAwareAspectJAutoProxyCreator (0) | 2022.08.01 |