[Spring] Spring Advisor์ Pointcut - ๊ฐ๋ ํธ
Spring AOP ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํด Advice๋ฅผ ๋ง๋ค์ด ๋ฉ์๋์ ์ ํ์ฒ๋ฆฌ๋ฅผ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ํตํด ๊ตฌํํด๋ดค์ต๋๋ค.
2022.05.16 - [Programming/Spring] - [Spring] Spring Advice๋ก ์ปค์คํ ์ด๋๋ฐ์ด์ค ๋ง๋ค๊ธฐ
Spring AOP์ ProxyFactory ํด๋์ค๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ๋ฉ์๋์์ AOP ํ๋ก์ ์ธ์คํด์ค๋ฅผ ์ป๊ณ ๊ตฌ์ฑํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋๋ฐ์.
์ด ์๋ฆฌ๋ฅผ ๋ณด์๋ฉด addAdvice ๋ฉ์๋๊ฐ ํธ์ถ๋์์ ๋ ๋ด๋ถ์ ์ผ๋ก addAdvisor ๋ฉ์๋์ ์์ ์ ์์ํ์ฌ DefaultPointcutAdvisor ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํธ์ปท์ผ๋ก ์ด๋๋ฐ์ด์ ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋์์ ๋ชจ๋ ๋ฉ์๋์ ์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ, AOP๋ฅผ ๋ก๊น ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด ๊ด์ฐฎ๊ฒ ์ง๋ง ๋๋ก๋ ํน์ ๋ฉ์๋์์ ์ด๋๋ฐ์ด์ค๊ฐ ์๋ํ์ง ์๋๋ก ๊ตฌํํด์ผํ ๋๊ฐ ์์ต๋๋ค.
๋ฉ์๋์ ์์ฐจ์ ๊ฒ์ฌ
๊ฐ๋จํ๊ฒ๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์์ฐจ์ ์ผ๋ก ํ์ธํ์ฌ ํด๋น ๋ฉ์๋๊ฐ ์ด๋๋ฐ์ด์ค ๋์์ ์ ์ธํด์ผ ํ ์ง๋ฅผ ๊ตฌ๋ถํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํด๋ณผ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด ์ ๊ทผ ๋ฐฉ์์๋ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
- ์ ์ฉ ๊ฐ๋ฅํ ๋ฉ์๋ ๋ชฉ๋ก์ ์ด๋๋ฐ์ด์ค์ ํ๋ ์ฝ๋ฉํ๋ ๊ฒฝ์ฐ, ์ด๋๋ฐ์ด์ค์ ์ฌ์ฌ์ฉ์ฑ ๊ฐ์
- ์ด๋๋ฐ์ด์ค ๋ด ์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋๋์ง ๋ฉ์๋๋ฅผ ๊ฒ์ฌํ ๋ O(n) [์ฌ๊ธฐ์ n์ ๋ฉ์๋ ๊ฐฏ์]์ ์๊ฐ์ด ๋ฐ์ํ๋ฏ๋ก ์ฑ๋ฅ ์ด์ ๋ฐ์
1๋ฒ์งธ ๋จ์ ์ ๋จ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ธ ์ด์์ธ๋ฐ, ๋ง์ฝ ํ๋ ์ฝ๋ฉ์ ํตํด ์ ์ฉ๊ฐ๋ฅํ ๋ฉ์๋ ๋ชฉ๋ก์ ๋ฃ๋ ๊ฒฝ์ฐ ์ด๋๋ฐ์ด์ค ๋ง๋ค ์ด ๋ฉ์๋๋ฅผ ๋ฃ์ด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ค์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ฐ๊ธฐ ๋ณด๋ค๋ ์ง์ ๊ตฌํํด์ ๋ฃ๋ ๊ฒ์ ์ ํธํ ์๋ ์๊ฒ ๋ค ๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
2๋ฒ์งธ ๋จ์ ์ ์ด๋๋ฐ์ด์ค๊ฐ ๋ฉ์๋ ํธ์ถ ๋๋ง๋ค ์ด ๋ฉ์๋์ ๋ด๊ฐ ์์ด์ผ ํ๋์ง ์์ด์ผ ํ๋์ง๋ฅผ ์ผ์ผ์ด ๋ฉ์๋ ๊ฐฏ์๋งํผ ์ํํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด ๋ฌธ์ ๋ ๋ฉ์๋๊ฐ ๋์ด๋๋ ๋งํผ ์ฑ๋ฅ ๊ฐ์๋์ด ์ปค์ง๊ธฐ ๋๋ฌธ์ ์ฌํ ์ฐ๋ คํด์ผ ํ ๋ถ๋ถ์ ๋๋ค.
ํฌ์ธํธ์ปท(Pointcut)
์์ ๋ณธ ๋จ์ ์ ๊ฐ์ ํ ๊ฒ์ด ๋ฐ๋ก ํฌ์ธํธ์ปท์ ๋๋ค. ํฌ์ธํธ์ปท์ ์ฌ์ฉํ๋ฉด ์ด๋๋ฐ์ด์ค ๋ด์ ์ ์ฉ ๋์ ๋ฉ์๋์ธ์ง๋ฅผ ๊ฒ์ฌํ๋ ์ฝ๋๋ฅผ ๋ฃ์ง ์์๋ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํ ๋ฉ์๋๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋ํ ํฌ์ธํธ์ปท์ ๊ฐ ๋ฉ์๋๋ง๋ค ์ด ๋ฉ์๋๊ฐ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํด์ผ ํ๋์ง, ์ํด์ผ ํ๋์ง๋ฅผ ํ ๋ฒ ๊ฒ์ฌ๋ฅผ ์ํํ ๋ค ์ด๋ฅผ ์บ์ฑํ ๋ค ๋์ค์ ์ฌ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ด์๋ ํด์ํ ์ ์์ต๋๋ค.
๊ฐ๊ธ์ ์ด๋ฉด ๊ทธ๋์ผ๊ฒ ์ง๋ง ๋ฌด์กฐ๊ฑด์ ์๋๋๋ค. ์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ ์ด์ ๊ธ์์ ๋ค๋ค๋ KeyGenerator์ฒ๋ผ ์ด๋๋ฐ์ด์ค์ ๋์ ํด๋์ค๊ฐ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด ์๋ ๊ฐ๊ฒฐํฉํ ์ผ์ด์ค์ ๊ฒฝ์ฐ์๋ ํ๋ ์ฝ๋ฉ์ด ์ข์ต๋๋ค. ๋ฒ์ฉ์ ์ผ๋ก ์จ์ผํ๋ ์ด๋๋ฐ์ด์ค์ธ ๊ฒฝ์ฐ๋ ๊ทธ ๋์์ด ๋ชจํธํ์ฌ ํ๋ ์ฝ๋ฉํ๊ธฐ์๋ ๋ฒ๊ฑฐ๋ก์์ด ๋ง์ด ์๊ธฐ๊ฒ ์ง๋ง ๊ทธ ๋์์ด ๋ช ํํ ๊ฒ์ ๋ฐ๋๋ก ํ๋ ์ฝ๋ฉ์ด ์ข์ ๊ฒ์ ๋๋ค.
์ด์ฒ๋ผ ์ด๋๋ฐ์ด์ค์ ๋์ ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋์ ์น๋ฐ๋(Target affinity)๋ผ๊ณ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋๋ฐ์ด์ค์ ๋ํ ์น๋ฐ๋๊ฐ ๊ฑฐ์ ์๊ฑฐ๋ ์ ํ ์๋ค๋ฉด ํฌ์ธํธ์ปท์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ๋ผ ํฌ์ธํธ์ปท ์ธํฐํ์ด์ค๊ฐ ์ด๋ป๊ฒ ๋์ด ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค. Spring์์ ํฌ์ธํธ์ปท์ ๋ค์๊ณผ ๊ฐ์ Pointcut ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด ์์ฑํฉ๋๋ค.
Spring AOP ํจํค์ง์ ์๋ Pointcut ์ธํฐํ์ด์ค๋ฅผ ๋ณด๋ฉด ClassFilter์ MethodMacher์ ์ธ์คํด์ค๋ฅผ ๊ฐ๊ฐ ๋ณํํ๋ getter ๋ฉ์๋๊ฐ ์กด์ฌํฉ๋๋ค.
Pointcut ์ธํฐํ์ด์ค์๋ getClassFilter ๋ฉ์๋๊ฐ ์๋๋ฐ, ์ด๋ Pointcut์ ํน์ ๋ฉ์๋์ ์ ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ๋ ์ฐ๋ ๋ฉ์๋๋ก Spring์์ ์ด ๋ฉ์๋๋ฅผ ํตํด Pointcut ์ธํฐํ์ด์ค๊ฐ ๋ฉ์๋์ ํด๋์ค์ ์ ์ฉ๋๋์ง๋ฅผ ๋จผ์ ํ์ธํฉ๋๋ค.
ClassFilter ์ธํฐํ์ด์ค์๋ matches ๋ฉ์๋๊ฐ ์์ต๋๋ค. ์ด ๋ฉ์๋๋ ๊ฒ์ฌํ ํด๋์ค๋ฅผ ๋ํ๋ด๋ Class ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ๋๋ฐ, matches๊ฐ true๋ฅผ ๋ฐํํ๋ฉด ํฌ์ธํธ์ปท์ด ํด๋น ํด๋์ค์ ๋ฐ์๋๋ ๊ฒ์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
ClassFilter ๋ฐ์ผ๋ก MethodMatcher๊ฐ ์์ต๋๋ค. Spring์์๋ 2๊ฐ์ง MethodMatcher๋ฅผ ์ง์ํ๋ฉฐ isRuntime ๋ฉ์๋์ ๋ฐ๋ผ ์ ์ MethodMatcher๋ฅผ ์ธ์ง ๋์ MethodMatcher๋ฅผ ์ธ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- isRuntime() ๋ฉ์๋๋ก runtime์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธ
- ์ ๋ฉ์๋ ๋ฐํ๊ฐ์ ๋ฐ๋ผ MethodMatcher์ ์ข ๋ฅ๋ฅผ ๊ฒฐ์
์ ์ ํฌ์ธํธ์ปท์ผ ๋ ์คํ๋ง์ ๋์์ ๋ชจ๋ ๋ฉ์๋์ ๋ํด ํ ๋ฒ์ฉ MethodMatcher์ matches ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ๋ฐํ๊ฐ์ ์บ์ฑํ์ฌ ๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค. (๊ฐ ๋ฉ์๋๋ง๋ค ํ ๋ฒ๋ง ์ด ๋ก์ง์ ์ ์ฉํ๋ฉฐ ๋์ค์๋ ์บ์๋ ๊ฐ์ ์ด์ฉ)
๋์ ํฌ์ธํธ์ปท์ผ ๋ ์คํ๋ง์ ๋ฉ์๋์ ์ ๋ฐ์ ์ธ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ฉ์๋๋ฅผ ์ฒ์ ํธ์ถํ์ ๋ matches ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. ํ์ง๋ง ๋ง์ฝ์ ์ ์ ๊ฒ์ฌ๊ฐ true๋ฅผ ๋ฐํํ๋ฉด ์คํ๋ง์ matches ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ง๋ค ์ถ๊ฐ๋ก ์ ์ ๊ฒ์ฌ๋ฅผ ๋ ์ํํ๊ฒ ๋ฉ๋๋ค.
- ๋ฉ์๋ ์ฒซ ํธ์ถ์ matches๋ก ์ ์ ๊ฒ์ฌ ์ํ
- ๋ง์ฝ ์ ์ ๊ฒ์ฌ์ true๋ฅผ ๋ฐํํ ๊ฒฝ์ฐ ๋ฉ์๋ ํธ์ถ๋ง๋ค ์ ์ ๊ฒ์ฌ ์ํ
- ์ ์ ๊ฒ์ฌ๊ฐ false๋ก ๋ํ๋ ๊ฒฝ์ฐ ์ด ๋ฉ์๋๋ ํฌ์ธํธ์ปท์ ์ํํ์ง ์์ผ๋ฏ๋ก ๊ฒ์ฌ ์ค๋จ
์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋์ MethodMatcher๋ ๋ฉ์๋ ์์ฒด๋ฅผ ๋ณด๋ ๊ฒ์ด ์๋ ๋ฉ์๋์ ํน์ ํธ์ถ์ ๊ธฐ๋ฐ์ผ๋ก ํฌ์ธํธ์ปท์ ์ ์ฉํด์ผ ํ ์ง๋ฅผ ๋ณด๊ธฐ ๋๋ฌธ์ ๋ ๋ง์ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
์์ ๊ฐ์ ์ํฉ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด ์๋ฅผ ๋ค์ด ์ธ์๊ฐ 100๋ณด๋ค ํฐ Integer์ผ ๋๋ง ํฌ์ธํธ์ปท์ ์ ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด์ฒ๋ผ ๋ฉ์๋์ ๋ชจ์, ํํ๋ก ๊ตฌ๋ถํ์ง ์๊ณ ๋ฉ์๋์ ํน์ ํ๋์ผ๋ก ๋ณด๋ ค๊ณ ํ๋ค๋ฉด ๋์ MethodMatcher๋ฅผ ์ํํด์ผ ํฉ๋๋ค.
ํ์ง๋ง ๋์ MethodMatcher๋ ๊ทธ๋งํผ ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์ ์ ์ MethodMatcher๋ณด๋ค ์ฑ๋ฅ์ด ์ข์ง๋ ์์ต๋๋ค. ํ์ง๋ง ๋์ ํฌ์ธํธ์ปท์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ๋ ์๋นํ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ฉฐ ์ด ๋ถ๋ถ์ด ํ์ํ์ง ์๋ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ ์ MethodMatcher๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋์ MethodMatcher๋ฅผ ์จ์ผํ ๋๊ฐ ์๋ค๋ฉด ์ด๋๋ฐ์ด์ค๊ฐ ์๋นํ ์ค๋ฒํค๋๋ฅผ ๋ฐ์ํ๋ ๋ก์ง์ผ ๋ ๋์ ํฌ์ธํธ์ปท์ ์ด์ฉํด ๋ถํ์ํ ์ด๋๋ฐ์ด์ค์ ํธ์ถ์ ํผํ๋๋ก ๊ตฌํํ๋ค๋ฉด ํจ์จ์ ์ผ๋ก ์ฌ์ฉํด ๋ณผ ์ ์์ ๊ฒ์ ๋๋ค.
Spring์ Pointcut ๊ตฌํ์ฒด
ํฌ์ธํธ์ปท ์ธํฐํ์ด์ค๋ ๊ตฌํ์ฒด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ด๋ค์์ผ๋ก ์ฌ์ฉํ ์ง๋ฅผ ๊ตฌํํด์ค์ผ ํฉ๋๋ค. ํ์ง๋ง ์คํ๋ง์ ์ ์ ํฌ์ธํธ์ปท๊ณผ ๋์ ํฌ์ธํธ์ปท์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ์ถ์ ํด๋์ค๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ์ง์ ์ปค์คํ ํฌ์ธํธ์ปท์ ๊ตฌํํด์ผ ํ ํ์๋ ์์ต๋๋ค.
Spring 4.x ๋ฒ์ ์์๋ 8๊ฐ์ ํฌ์ธํธ์ปท ์ธํฐํ์ด์ค ๊ตฌํ์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค. 2๊ฐ์ ์ถ์ ํด๋์ค๋ ์ ์ ๋๋ ๋์ ํฌ์ธํธ์ปท์ ์์ฑํ ๋ ์ฌ์ฉํ ์ ์๋ ํธ์ ํด๋์ค(convenience class)์ด๊ณ , ๋๋จธ์ง 6๊ฐ์ ํด๋์ค๋ ๊ฐ๊ธฐ ๊ฐ๋ณ์ ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์ ํด๋์ค(concrete class)์ ๋๋ค.
๋ค์์ 2๊ฐ์ ํธ์ ํด๋์ค ์ด๋ฆ๊ณผ ํจํค์ง๋ช ์ ๋ณด๊ฒ ์ต๋๋ค.
- StaticMethodMatcherPointcut
(org.springframework.aop.support) - DynamicMethodMatcherPointcut
(org.springframework.aop.support)
์ ์ ํฌ์ธํธ์ปท์ ์์ฑํ๋ StaticMethodMatcherPointcut๊ณผ ๋์ ํฌ์ธํธ์ปท์ ์์ฑํ๋ DynamicMethodMatcherPointcut์ด ์์ต๋๋ค.
- AnnotationMatchingPointcut
(org.springframework.aop.support.annotation)
ํด๋์ค๋ ๋ฉ์๋์์ ํน์ Java annotation์ ์ฐพ๋ ํฌ์ธํธ์ปท ๊ตฌํ์ฒด - AspectJExpressionPointcut
(org.springframework.aop.aspectj)
AspectJ ์๋ฒ๋ฅผ ์ฌ์ฉํด AspectJ ๊ตฌ๋ฌธ์ผ๋ก ํฌ์ธํธ์ปท ํํ์์ ํ๊ฐํ๋ ํฌ์ธํธ์ปท ๊ตฌํ์ฒด - ComposablePointcut
(org.springframework.aop.support)
๋ ์ด์์ ํฌ์ธํธ์ปท์ union()๊ณผ intersaction() ๊ฐ์ ์์ ์ ํตํด ํ๋๋ก ๊ตฌ์ฑ - ControlFlowPointcut
(org.springframework.aop.support)
๋ค๋ฅธ ๋ฉ์๋์ ์ ์ด ํ๋ฆ์ ํฌํจ๋ ๋ชจ๋ ๋ฉ์๋์ ๋์๋๋ ํน์ํ ํฌ์ธํธ์ปท.
(๋ค๋ฅธ ๋ฉ์๋์ ํธ์ถ ๊ฒฐ๊ณผ๋ก๋ถํฐ ์ง๊ฐ์ ์ ์ผ๋ก ํธ์ถ๋๋ ๋ชจ๋ ๋ฉ์๋๊ฐ ํด๋น) - JdkRegexpMethodPointcut
(org.springframework.aop.support)
JDK 1.4 ์ ๊ท์์ผ๋ก ํฌ์ธํธ์ปท์ ์ ์ํ๋ ํฌ์ธํธ์ปท - NameMatchMethodPointcut
(org.springframework.aop.support)
๋ฉ์๋ ์ด๋ฆ ๋ชฉ๋ก์ ๋ฉ์๋๊ฐ ํฌํจ๋๋์ง ๊ฐ๋จํ ํ์ธํ๋ ํฌ์ธํธ์ปท
DefaultPointcutAdvisor
Pointcut ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Advisor ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก PointcutAdvisor ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
์ด์ ๊ธ์์ ๋ค๋ค๋ค์ํผ Advisor๋ ์ด๋๋ฐ์ด์ค์ ํฌ์ธํธ์ปท์ ๊ฒฐํฉ์ ์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋ ๋ฉ์๋์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํ ๋ฐฉ์์ ์ง์ ํ๋ ์คํ๋ง์ aspect์ ๋๋ค.
Spring AOP์์ aspect๋ Advisor ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค๋ก ์๋์ ๋ ๊ฐ์ง Advisor๋ฅผ ์ ๊ณตํฉ๋๋ค.
- PointcutAdvisor
- IntroductionAdvisor
ํฌ์ธํธ์ปท์ ์ฌ์ฉํ์ฌ ์กฐ์ธํฌ์ธํธ์ ์ ์ฉํ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ดํ๋ ๋ชจ๋ Advisor ๊ตฌํ์ฒด๋ Pointcut Advisor ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด ์ธ์๋ Spring์ Introduction์ ํน๋ณํ ์ข ๋ฅ์ ์ด๋๋ฐ์ด์ค๋ก ์ทจ๊ธํ๋ฏ๋ก IntroductionAdvisor ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด Introduction์ด ์ ์ฉ๋๋ ํด๋์ค๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
์คํ๋ง์์๋ ์ฌ๋ฌ PointcutAdvisor ๊ตฌํ์ฒด๋ฅผ ์ ๊ณตํ์ง๋ง ์ด ๊ธ์์๋ DefaultPointcutAdvisor๋ง์ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค. DefaultPointcutAdvisor๋ ํ๋์ ํฌ์ธํธ์ปท์ ํ๋์ ์ด๋๋ฐ์ด์ค์ ์ฐ๊ฒฐ์ํค๋ ๊ฐ๋จํ PointcutAdvisor์ ๋๋ค.
๋ง์น๋ฉฐ...
์ด๋๋ฐ์ด์ค์ ์ด์ด ํฌ์ธํธ์ปท์ ๋ํด ์์๋ดค์ต๋๋ค. Spring AOP๊ฐ ๊ฐ์ง ๊ฐ๋ ์ด ์์ฒญ ๊น๊ณ ๋ณต์กํ๋ค๋ ๊ฒ์ ๋๊ผ์ํ ๋ฐ์.
๋ค์ ํฌ์คํธ์ ๊ณ์ ์ด์ด์ ํฌ์ธํธ์ปท ๊ตฌํ์ฒด๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์ง๋ฅผ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ : Spring AOP APIs
(https://docs.spring.io/spring-framework/docs/2.0.x/reference/aop-api.html)