[Error] Bean could not be injected because it is a JDK dynamic proxy
ํ์ ์ ํ ์ง์
CGLIB vs JDK Dynamic Proxy
๋ ๋ค ๋ชจ๋ Spring์์ AOP ๊ธฐ๋ฅ์ ์ง์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋ก์ ์์ฑ ๊ธฐ๋ฒ
CGLIB
๋ฐ์ดํธ์ฝ๋๋ฅผ ์กฐ์ํด ํด๋์ค๋ฅผ ์์ฑ
๋ณธ ๊ฐ์ฒด๋ฅผ ์์ํ๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฉค๋ฒ ๊ฐ์ฒด๋ก ํ๊ฒ(์ค์ ๊ฐ์ฒด)์ ์์
์์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์, final์ด ๋ถ์ฌ๋์๊ฑฐ๋ ์ ๊ทผ ์ ์ด์๊ฐ private์ธ ๋ฉ์๋์๋ ์ ์ฉํ ์ ์์
JDK Dynamic Proxy
๋ฆฌํ๋ ์ ์ ์ด์ฉ
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ์์ฑํ๊ณ , ๋ฉค๋ฒ ๊ฐ์ฒด๋ก ํ๊ฒ(์ค์ ๊ฐ์ฒด)์ ์์
AOP๊ฐ ์ ์ฉ๋ ๋ฉ์๋ ํธ์ถ ์ ํ๋ก์ ๊ฐ์ฒด์์ Advice ๋ก์ง ์ or ํ๋ก ํ๊ฒ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ํต์ฌ ๋ก์ง์ด ์ํ๋ ์ ์๋๋ก ํจ
Spring์์๋ ํด๋์ค๊ฐ ํ๋ ์ด์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ ์ด ํด๋์ค์ ํ๋ก์๋ JDK dynamic proxy ๊ธฐ๋ฒ์ผ๋ก ์์ฑ
Error - Bean could not be injected because it is a JDK dynamic proxy
ํด๋น ์ค๋ฅ๋, ์ธํฐํ์ด์ค๊ฐ ์๋ ์ธํฐํ์ด์ค์ ๊ตฌํ ํด๋์ค๋ฅผ ์ฃผ์ ๋ฐ๊ณ ์ ํ ๋ ๋ฐ์
ํด๋น ์ค๋ฅ์์ ์ธ๊ธํ Bean์ด CGLIB ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋๋ก ํจ์ผ๋ก์จ ์ด ์ค๋ฅ๋ฅผ ํด๊ฒฐํ ์ ์์
Spring์์๋
proxyTargetClass
๋ผ๋ ์ต์ ์ ํตํด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค์ ํ๋ก์๋ฅผ ์ธํฐํ์ด์ค ๊ตฌํ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ ์ง ํด๋์ค ์์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ ์ง๋ฅผ ์ง์ ํ ์ ์์false (default): ์ธํฐํ์ด์ค ๊ธฐ๋ฐ
true: ํด๋์ค ์์ ๊ธฐ๋ฐ
์ฌ๋ด
์ต๊ทผ์ด ๋์ด์์ผ AOP ๊ณต๋ถ๋ฅผ ํ๋๋ฐ, AOP์ ๋ํ ์ง์ ์์ด ์ด ์ค๋ฅ๋ฅผ ๋ง๋ฌ์ผ๋ฉด ์ดํด๋ ๋ชปํ๊ณ ๋ฒ์ช์ ๊ฒ ๊ฐ๋ค.
์ญ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ด ์ค์ํ๋คโฆ
Reference
Last updated