ํฌ์ธํธ์ปท ํํ์์ execution
๊ฐ์ ํฌ์ธํธ์ปท ์ง์์๋ก ์์ํ๋ค. ์ค์ฌ์ PCD ๋ผ ํ๋ค.
- ํฌ์ธํธ์ปท ์ง์์์ ์ข
๋ฅ
execution
: ๋ฉ์๋ ์คํ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํ๋ค. ์คํ๋ง AOP ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๊ณ , ๊ธฐ๋ฅ๋ ๋ณต์กํ๋ค.within
: ํน์ ํ์ ๋ด์ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญํ๋ค.args
: ์ธ์๊ฐ ์ฃผ์ธ์ง ํ์ ์ ์ธ์คํด์ค์ธ ์กฐ์ธ ํฌ์ธํธthis
: ์คํ๋ง ๋น ๊ฐ์ฒด(์คํ๋ง AOP ํ๋ก์)๋ฅผ ๋์์ผ๋ก ํ๋ ์กฐ์ธ ํฌ์ธํธtarget
: Target ๊ฐ์ฒด(์คํ๋ง AOP ํ๋ก์๊ฐ ๊ฐ๋ฅดํค๋ ์ค์ ๋์)๋ฅผ ๋์์ผ๋ก ํ๋ ์กฐ์ธ ํฌ์ธํธ@target
: ์คํ ๊ฐ์ฒด์ ํด๋์ค์ ์ฃผ์ด์ง ํ์ ์ ์ ๋ ธํ ์ด์ ์ด ์๋ ์กฐ์ธ ํฌ์ธํธ@within
: ์ฃผ์ด์ง ์๋ ธํ ์ด์ ์ด ์๋ ํ์ ๋ด ์กฐ์ธ ํฌ์ธํธ@annotation
: ๋ฉ์๋๊ฐ ์ฃผ์ธ์ง ์๋ ธํ ์ด์ ์ ๊ฐ์ง๊ณ ์๋ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ๋งค์นญ@args
: ์ ๋ฌ๋ ์ค์ ์ธ์์ ๋ฐํ์ ํ์ ์ด ์ฃผ์ด์ง ํ์ ์ ์๋ ธํ ์ด์ ์ ๊ฐ๋ ์กฐ์ธ ํฌ์ธํธbean
: ์คํ๋ง ์ ์ฉ ํฌ์ธํธ์ปท ์ง์์, ์ง์ ์ด๋ฆ์ผ๋ก ํฌ์ธํธ์ปท์ ์ง์ ํ๋ค.
์คํ๋ง์ ํ๋ก์ ๋ฐฉ์์ AOP ๋ฅผ ์ฌ์ฉํ๋ค.
๋ฐ๋ผ์ AOP ๋ฅผ ์ ์ฉํ๋ ค๋ฉด ํญ์ ํ๋ก์๋ฅผ ํตํด์ ๋์ ๊ฐ์ฒด(Target)์ ํธ์ถํด์ผ ํ๋ค.
์ด๋ ๊ฒ ํด์ผ ํ๋ก์์์ ๋จผ์ ์ด๋๋ฐ์ด์ค๋ฅผ ํธ์ถํ๊ณ , ์ดํ์ ๋์ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ค.
๋์ ๊ฐ์ฒด์ ๋ด๋ถ์์ ๋ฉ์๋ ํธ์ถ์ด ๋ฐ์ํ๋ฉด ํ๋ก์๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋์ ๊ฐ์ฒด๋ฅผ ์ง์ ํธ์ถํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค!
์๋ฐ ์ธ์ด์ธ์ด ๋ฉ์๋ ์์ ๋ณ๋์ ์ฐธ์กฐ๊ฐ ์์ผ๋ฉด this
๋ผ๋ ๋ป์ผ๋ก ์๊ธฐ ์์ ์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ์ ๋ด๋ถ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋๋ฐ, ์ฌ๊ธฐ์ this
๋ ์ค์ ๋์ ๊ฐ์ฒด(target) ์ ์ธ์คํด์ค๋ฅผ ๋ปํ๋ค.
์ด๋ฌํ ๋ด๋ถ ํธ์ถ์ ํ๋ก์๋ฅผ ๊ฑฐ์น์ง ์๋๋ค. ๋ฐ๋ผ์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํ ์ ์๋ค.
- ์๊ธฐ ์์ ์ ์์กด๊ด๊ณ ์ฃผ์ ๋ฐ๋ ๊ฒ
- ์ง์ฐ ์กฐํ (
ObjectProvider(Provider)
,ApplicationContext
์ฌ์ฉ) - ๋ด๋ถ ํธ์ถ์ด ๋ฐ์ํ์ง ์๋๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ (๊ถ์ฅ)
์คํ๋ง์ด ํ๋ก์๋ฅผ ๋ง๋ค๋ ์ ๊ณตํ๋ ProxyFactory
์ proxyTargetClass
์ต์
์ ๋ฐ๋ผ ๋์ค ํ๋๋ฅผ ์ ํํด์ ํ๋ก์๋ฅผ ๋ง๋ค ์ ์๋ค.
proxyTargetClass=false
: JDK ๋์ ํ๋ก์๋ฅผ ์ฌ์ฉํด์ ์ธํฐํ์ด์ค ๊ธฐ๋ฐ ํ๋ก์ ์์ฑproxyTargetClass=true
: CGLIB๋ฅผ ์ฌ์ฉํด์ ๊ตฌ์ฒด ํด๋์ค ๊ธฐ๋ฐ ํ๋ก์ ์์ฑ- ์ฐธ๊ณ ๋ก ์ต์ ๊ณผ ๋ฌด๊ดํ๊ฒ ์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉด JDK ๋์ ํ๋ก์๋ฅผ ์ ์ฉํ ์ ์์ผ๋ฏ๋ก CGLIB๋ฅผ ์ฌ์ฉํ๋ค.
์ธํฐํ์ด์ค ๊ธฐ๋ฐ์ผ๋ก ํ๋ก์๋ฅผ ์์ฑํ๋ JDK ๋์ ํ๋ก์๋ ๊ตฌ์ฒด ํด๋์ค์ ํ์ ์บ์คํ ์ด ๋ถ๊ฐ๋ฅํ ํ๊ณ๊ฐ ์๋ค.
์ค์ ๋ก ๊ฐ๋ฐํ ๋๋ ์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์กด๊ด๊ณ ์ฃผ์
์ ๋ฐ๋ ๊ฒ์ด ๋ง๋ค.
DI์ ์ฅ์ ์ด ๋ฌด์์ธ๊ฐ? DI ๋ฐ๋ ํด๋ผ์ด์ธํธ ์ฝ๋์ ๋ณ๊ฒฝ ์์ด ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
๋ฐ์์ผ ํ๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํ
์คํธ, ๋๋ ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋ก AOP ํ๋ก์๊ฐ ์ ์ฉ๋ ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์ง์ ์์กด๊ด๊ณ ์ฃผ์
๋ฐ์์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค.
์ด๋๋ CGLIB ๋ฅผ ํตํด ๊ตฌ์ฒด ํด๋์ค ๊ธฐ๋ฐ์ผ๋ก AOP ํ๋ก์๋ฅผ ์ ์ํ๋ฉด ๋๋ค.
- ๋์ ํด๋ ์ค์ ๊ธฐ๋ณธ ์์ฑ์ ํ์
- ์์ฑ์ 2๋ฒ ํธ์ถ ๋ฌธ์
- final ํค์๋ ํด๋์ค, ๋ฉ์๋ ์ฌ์ฉ ๋ถ๊ฐ