Skip to content

Latest commit

Β 

History

History
54 lines (43 loc) Β· 3.63 KB

1.12.1. Basic concepts: @Bean and @Configuration.md

File metadata and controls

54 lines (43 loc) Β· 3.63 KB

1.12.1. Basic concepts: @Bean and @Configuration(κΈ°λ³Έ κ°œλ… : @Bean 및 @Configuration)

Spring의 μƒˆλ‘œμš΄ Java ꡬ성 μ§€μ›μ˜ 쀑심은 @Configuration-annotated ν΄λž˜μŠ€μ™€ @Bean-annotated λ©”μ†Œλ“œμ΄λ‹€.

@Bean μ–΄λ…Έν…Œμ΄μ…˜μ€ λ©”μ†Œλ“œκ°€ Spring IoC μ»¨ν…Œμ΄λ„ˆμ— μ˜ν•΄ 관리 될 μƒˆλ‘œμš΄ 객체λ₯Ό μΈμŠ€ν„΄μŠ€ν™”,
ꡬ성 및 μ΄ˆκΈ°ν™”ν•œλ‹€λŠ” 것을 λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©λœλ‹€.
Spring의 <beans/> XML 섀정에 μ΅μˆ™ν•œ 뢄듀을 μœ„ν•΄ @Bean 주석은 <bean/> μš”μ†Œμ™€ λ™μΌν•œ μ—­ν• μ„ν•©λ‹ˆλ‹€.
Spring @Component와 ν•¨κ»˜ @Bean annotated λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ @Configuration 빈과 ν•¨κ»˜ 자주 μ‚¬μš©λ©λ‹ˆλ‹€.

@Configuration을 μ‚¬μš©ν•˜μ—¬ ν΄λž˜μŠ€μ— μ£Όμ„μ„λ‹€λŠ” 것은 주된 λͺ©μ μ΄ Bean μ •μ˜μ˜ μ†ŒμŠ€μž„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

κ²Œλ‹€κ°€ @Configuration ν΄λž˜μŠ€λŠ” 같은 ν΄λž˜μŠ€μ—μ„œ λ‹€λ₯Έ @Bean λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•¨μœΌλ‘œμ¨ bean κ°„ μ˜μ‘΄μ„±μ„ μ •μ˜ ν•  수 있게 ν•œλ‹€.
κ°€μž₯ λ‹¨μˆœν•œ κ°€λŠ₯ν•œ @Configuration ν΄λž˜μŠ€λŠ” λ‹€μŒκ³Ό 같이 읽을 수 μžˆμŠ΅λ‹ˆλ‹€.

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

μœ„μ˜ AppConfig ν΄λž˜μŠ€λŠ” λ‹€μŒ Spring <beans/> XMLκ³Ό λ™μΌν•©λ‹ˆλ‹€.

<beans>
    <bean id="myService" class="com.acme.services.MyServiceImpl"/>
</beans>

전체 @Configuration vs 'lite'@Bean λͺ¨λ“œ?

@Bean λ©”μ„œλ“œκ°€ @Configuration으둜 주석 μ²˜λ¦¬λ˜μ§€ μ•Šμ€ 클래슀 λ‚΄μ—μ„œ μ„ μ–Έ 될 λ•Œ 'lite' λͺ¨λ“œμ—μ„œ μ²˜λ¦¬λ˜λŠ” κ²ƒμœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€.
@Component λ˜λŠ” ν‰λ²”ν•œ ꡬ식 ν΄λž˜μŠ€μ—μ„œ μ„ μ–Έ 된 Bean λ©”μ†Œλ“œλŠ” 'lite'둜 κ°„μ£Όλ˜λ©°,
ν¬ν•¨ν•˜λŠ” 클래슀의 λ‹€λ₯Έ μ£Όμš” λͺ©μ κ³Ό @Bean λ©”μ†Œλ“œκ°€ 거기에 λ³΄λ„ˆμŠ€ μΌλΏμž…λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄, μ„œλΉ„μŠ€ ꡬ성 μš”μ†ŒλŠ” 적용 κ°€λŠ₯ν•œ 각 ꡬ성 μš”μ†Œ 클래슀의 μΆ”κ°€ @Bean λ©”μ„œλ“œλ₯Ό 톡해 관리 λ·°λ₯Ό μ»¨ν…Œμ΄λ„ˆμ— λ…ΈμΆœμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
μ΄λŸ¬ν•œ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ @Bean λ©”μ„œλ“œλŠ” λ‹¨μˆœν•œ λ²”μš© νŒ©ν† λ¦¬ λ©”μ„œλ“œ λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€.

전체 @Configurationκ³Ό 달리 lite @Bean λ©”μ†Œλ“œλŠ” bean κ°„ μ˜μ‘΄μ„±μ„ μ„ μ–Έ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
λŒ€μ‹ , 그듀은 ν¬ν•¨ν•˜λŠ” ꡬ성 μš”μ†Œμ˜ λ‚΄λΆ€ μƒνƒœμ™€ μ„ νƒμ μœΌλ‘œ μ„ μ–Έ ν•  μˆ˜μžˆλŠ” μΈμˆ˜μ— 따라 μž‘λ™ν•©λ‹ˆλ‹€.
λ”°λΌμ„œ μ΄λŸ¬ν•œ @Bean λ©”μ„œλ“œλŠ” λ‹€λ₯Έ @Bean λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•Šμ•„μ•Όν•©λ‹ˆλ‹€.
μ΄λŸ¬ν•œ 각각의 λ©”μ†Œλ“œλŠ” νŠΉλ³„ν•œ λŸ°νƒ€μž„ μ‹œλ§¨ν‹±μ—†μ΄ 문자 κ·ΈλŒ€λ‘œ 단지 νŠΉμ • 빈 참쑰에 λŒ€ν•œ νŒ©ν† λ¦¬ λ©”μ†Œλ“œ μž…λ‹ˆλ‹€.
μ—¬κΈ°μ„œ 긍정적 인 λΆ€μž‘μš©μ€ λŸ°νƒ€μž„μ— CGLIB μ„œλΈŒ ν΄λž˜μ‹±μ„ 적용 ν•  ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ
클래슀 λ””μžμΈ μΈ‘λ©΄μ—μ„œ μ œν•œμ΄ μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ (즉, 포함 ν΄λž˜μŠ€κ°€ μ΅œμ’… 클래슀 일 수 있음).

일반적인 μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ @Bean λ©”μ„œλ“œλŠ” @Configuration 클래슀 λ‚΄μ—μ„œ μ„ μ–Έλ˜λ―€λ‘œ
'전체'λͺ¨λ“œκ°€ 항상 μ‚¬μš©λ˜κ³  크둜슀 λ©”μ„œλ“œ μ°Έμ‘°κ°€ μ»¨ν…Œμ΄λ„ˆμ˜ 수λͺ…μ£ΌκΈ° κ΄€λ¦¬λ‘œ λ¦¬λ””λ ‰μ…˜λ©λ‹ˆλ‹€.
μ΄λ ‡κ²Œν•˜λ©΄ λ™μΌν•œ @Bean λ©”μ†Œλ“œκ°€ μ‹€μˆ˜λ‘œ '정상'λͺ¨λ“œμ—μ„œ μž‘λ™ ν•  λ•Œ
μΆ”μ ν•˜κΈ° μ–΄λ €μš΄ λ―Έλ¬˜ν•œ 버그
λ₯Ό μ€„μ΄λŠ” 데 λ„μ›€μ΄λ˜λŠ” 일반 Java ν˜ΈμΆœμ„ 톡해 ν˜ΈμΆœλ˜λŠ” 것을 방지 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


@Beanκ³Ό @Configuration 주석은 λ‹€μŒ μ„Ήμ…˜μ—μ„œ μƒμ„Ένžˆ λ…Όμ˜ 될 κ²ƒμž…λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ λ¨Όμ € Java 기반 ꡬ성을 μ‚¬μš©ν•˜μ—¬ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“œλŠ” λ‹€μ–‘ν•œ 방법을 λ‹€λ£° κ²ƒμž…λ‹ˆλ‹€.