Search
πŸ™Š

@Configuration(proxyBeanMethods = false)

Intro::

@Configuration(proxyBeanMethods = false) 에 λŒ€ν•œ μ •λ¦¬λ³Έμž…λ‹ˆλ‹€.

기본적인 @Configuration λ™μž‘ 방식

Spring은 @Configuration 클래슀λ₯Ό μ²˜λ¦¬ν•  λ•Œ, ν”„λ‘μ‹œ(proxy) 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 이 클래슀의 λ©”μ„œλ“œ ν˜ΈμΆœμ„ κ°€λ‘œμ±„κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€. μ΄λŠ” μŠ€ν”„λ§μ˜ 빈 등둝 κ³Όμ •μ—μ„œ μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyService(); } @Bean public MyRepository myRepository() { return new MyRepository(); } }
Bash
볡사
AppConfig ν΄λž˜μŠ€λŠ” μŠ€ν”„λ§μ— μ˜ν•΄ ν”„λ‘μ‹œλ‘œ λž˜ν•‘λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ myService()와 myRepository() λ©”μ„œλ“œ 호좜이 ν”„λ‘μ‹œλ₯Ό 톡해 처리되며, λ™μΌν•œ 빈 μΈμŠ€ν„΄μŠ€κ°€ λ°˜ν™˜λ©λ‹ˆλ‹€.

proxyBeanMethods μ„€μ • μ˜΅μ…˜

proxyBeanMethods μ„€μ • μ˜΅μ…˜μ€ μ΄λŸ¬ν•œ ν”„λ‘μ‹œ λ™μž‘μ„ μ œμ–΄ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

proxyBeanMethods = true (κΈ°λ³Έκ°’)

β€’
ν”„λ‘μ‹œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ @Bean λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
β€’
λ©”μ„œλ“œ ν˜ΈμΆœμ„ κ°€λ‘œμ±„κ³  λ™μΌν•œ 빈 μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
β€’
μ΄λŠ” @Bean λ©”μ„œλ“œ κ°„μ˜ μ˜μ‘΄μ„±μ„ μ²˜λ¦¬ν•˜λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.

proxyBeanMethods = false

β€’
ν”„λ‘μ‹œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
β€’
@Bean λ©”μ„œλ“œκ°€ 호좜될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
β€’
μ΄λŠ” λ©”μ„œλ“œ ν˜ΈμΆœμ„ κ°€λ‘œμ±„μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ„±λŠ₯ μ΅œμ ν™”μ— 도움이 λ©λ‹ˆλ‹€.

proxyBeanMethods = false μ‚¬μš© 예제

proxyBeanMethods = false 섀정은 ν”„λ‘μ‹œ λ©”μ„œλ“œ 호좜이 ν•„μš”ν•˜μ§€ μ•Šκ±°λ‚˜, @Bean λ©”μ„œλ“œ κ°„μ˜ μ˜μ‘΄μ„±μ΄ 없을 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
@Configuration(proxyBeanMethods = false) public class AppConfig { @Bean public MyService myService() { return new MyService(); } @Bean public MyRepository myRepository() { return new MyRepository(); } }
Bash
볡사
이 μ„€μ •μ—μ„œλŠ” myService()와 myRepository() λ©”μ„œλ“œκ°€ 호좜될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•˜λ©°, ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ•½κ°„μ˜ μ„±λŠ₯ ν–₯상이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ£Όμ˜μ‚¬ν•­

β€’
proxyBeanMethods = falseλ₯Ό μ‚¬μš©ν•˜λ©΄ @Bean λ©”μ„œλ“œ κ°„μ˜ 호좜이 ν”„λ‘μ‹œλ‘œ μ²˜λ¦¬λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, 빈 κ°„μ˜ μ˜μ‘΄μ„±μ΄ μžˆλŠ” 경우 μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
β€’
예λ₯Ό λ“€μ–΄, ν•œ @Bean λ©”μ„œλ“œκ°€ λ‹€λ₯Έ @Bean λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ ν•΄λ‹Ή λΉˆμ„ μ°Έμ‘°ν•˜λŠ” 경우, proxyBeanMethods = false μ„€μ • μ‹œ 항상 μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ©λ‹ˆλ‹€.

κ²°λ‘ 

β€’
proxyBeanMethods = true (κΈ°λ³Έκ°’): μŠ€ν”„λ§μ€ ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜μ—¬ @Bean λ©”μ„œλ“œ ν˜ΈμΆœμ„ κ°€λ‘œμ±„κ³  λ™μΌν•œ 빈 μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ΄λŠ” 빈 κ°„μ˜ μ˜μ‘΄μ„±μ„ μ²˜λ¦¬ν•˜λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.
β€’
proxyBeanMethods = false: ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©°, λ©”μ„œλ“œ 호좜 μ‹œ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ΄λŠ” ν”„λ‘μ‹œ μ˜€λ²„ν—€λ“œλ₯Ό 쀄여 μ„±λŠ₯ μ΅œμ ν™”λ₯Ό 도λͺ¨ν•  수 μžˆμ§€λ§Œ, 빈 κ°„μ˜ μ˜μ‘΄μ„±μ΄ μžˆλŠ” 경우 μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.
proxyBeanMethods = falseλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 νŠΉμ • μƒν™©μ—μ„œ μœ μš©ν•  수 μžˆμ§€λ§Œ, 빈 κ°„μ˜ μ˜μ‘΄μ„±μ΄ μžˆλŠ” κ²½μš°μ—λŠ” 기본값을 μ‚¬μš©ν•˜λŠ” 것이 일반적으둜 더 μ•ˆμ „ν•©λ‹ˆλ‹€.

References::