[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