π[Spring] λΉ(Bean)μ λ±λ‘νλ λ°©λ².
1οΈβ£ @Configuration
μ΄λ
Έν
μ΄μ
.
@Configuration
μ΄λ
Έν
μ΄μ
μ Spring Frameworkμμ μλ° κΈ°λ°μ μ€μ ν΄λμ€λ₯Ό μ μν λ μ¬μ©νλ μ΄λ
Έν
μ΄μ
μ
λλ€.
μ΄ μ΄λ Έν μ΄μ μ΄ λΆμ ν΄λμ€λ μ€νλ§ μ»¨ν μ΄λμ μν΄ λΉ μ μλ₯Ό μ 곡νλ ν΄λμ€λ‘ μΈμλλ©°, μΌλ°μ μΌλ‘ λ©μλλ₯Ό ν΅ν΄ λΉμ μμ±νκ³ , μ΄λ₯Ό μ€νλ§ μ»¨ν μ΄λμ λ±λ‘νλ μν μ ν©λλ€.
1. @Configuration
μ μ£Όμ κΈ°λ₯.
1. μλ° κΈ°λ° μ€μ ν΄λμ€.
-
@Configuration
μ΄λ Έν μ΄μ μ μλ° μ½λλ‘ μ€νλ§ μ€μ μ κ΄λ¦¬ν μ μλλ‘ ν΄μ€λλ€. - μ ν΅μ μΈ XML κΈ°λ° μ€μ λμ , μλ° ν΄λμ€λ₯Ό μ¬μ©ν΄ μ ν리μΌμ΄μ μ μ€μ μ κ΄λ¦¬νκ³ , λΉμ μ μν μ μμ΅λλ€.
2. λΉ μ μ.
-
@Configuration
μ΄λ Έν μ΄μ μ΄ λΆμ ν΄λμ€ λ΄μμ μ μλ λ©μλμ@Bean
μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄, ν΄λΉ λ©μλκ° λ°ννλ κ°μ²΄κ° μ€νλ§ μ»¨ν μ΄λμ λΉμΌλ‘ λ±λ‘λ©λλ€. - μ΄ λ°©μμΌλ‘ κ°μ²΄μ μμ±κ³Ό μ΄κΈ°ν κ³Όμ μ μ€μ νκ³ κ΄λ¦¬ν μ μμ΅λλ€.
3. μ±κΈν€ 보μ₯.
-
@Configuration
μ΄ λΆμ ν΄λμ€λ κΈ°λ³Έμ μΌλ‘ μ±κΈν€ λΉμ 보μ₯ν©λλ€. - μ¦, μ΄ ν΄λμ€ λ΄μμ μ μλ λΉμ μ€νλ§ μ»¨ν μ΄λ λ΄μμ ν λ²λ§ μμ±λκ³ , λ€λ₯Έ κ³³μμ ν΄λΉ λΉμ μμ²ν λ λμΌν μΈμ€ν΄μ€κ° λ°νλ©λλ€.
- μ΄λ ν΄λμ€κ°
@Configuration
μ΄ μλ μΌλ° ν΄λμ€μΌ κ²½μ°μ μ°¨λ³νλλ μ€μν νΉμ±μ λλ€.
2. μμ.
λ€μμ @Configuration
μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ μλ° κΈ°λ°μΌλ‘ λΉμ λ±λ‘νλ μμμ
λλ€.
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}
3. μ€λͺ .
-
@Confifuration
-
AppConfig
ν΄λμ€κ° μ€νλ§ μ»¨ν μ΄λμμ μ€μ ν΄λμ€μμ λνλ λλ€. - μ΄ ν΄λμ€λ μ€νλ§ μ ν리μΌμ΄μ μ λΉμ μ μνλ μν μ ν©λλ€.
-
-
@Bean
- μ΄ μ΄λ Έν μ΄μ μ΄ λΆμ λ©μλλ μ€νλ§ μ»¨ν μ΄λμ λΉμ λ±λ‘ν©λλ€.
-
userService
μuserRepository
λ©μλλ κ°κ°UserService
μUserRepository
κ°μ²΄λ₯Ό λ°ννλ©°, μ΄ κ°μ²΄λ€μ μ€νλ§ μ»¨ν μ΄λμ μν΄ λΉμΌλ‘ κ΄λ¦¬λ©λλ€.
4. @Configuration
μ νΉμ§.
1. μ±κΈν€ κ΄λ¦¬.
-
@Configuration
μ΄λ Έν μ΄μ μ΄ λΆμ ν΄λμ€ λ΄μμ μ μλ λΉλ€μ κΈ°λ³Έμ μΌλ‘ μ±κΈν€μΌλ‘ κ΄λ¦¬λ©λλ€. - μ¦, μ¬λ¬ λ² μμ²νλλΌλ λμΌν μΈμ€ν΄μ€κ° λ°νλ©λλ€.
- μ€νλ§μ΄ λ΄λΆμ μΌλ‘ νλ‘μ ν΄λμ€λ₯Ό μ¬μ©νμ¬ λΉμ μ±κΈν€ μμ±μ 보μ₯ν©λλ€.
2. λͺ¨λνλ μ€μ .
-
@Configuration
μ μ¬μ©νλ©΄ μ ν리μΌμ΄μ μ μ€μ μ μ¬λ¬ μλ° ν΄λμ€λ‘ λλμ΄ λͺ¨λνν μ μμ΅λλ€. - μ΄λ₯Ό ν΅ν΄ μ€μ νμΌμ΄ 컀μ§λλΌλ κ΄λ¦¬νκΈ° μ½κ³ , μ μ§λ³΄μμ±μ΄ ν₯μλ©λλ€.
3. λ€λ₯Έ μ€μ νμΌκ³Ό ν΅ν©.
-
@Configuration
ν΄λμ€λ λ€λ₯Έ μ€μ νμΌμ΄λ XML νμΌκ³Ό ν¨κΌ μ¬μ©λ μ μμ΅λλ€. - μ΄λ‘ μΈν΄ κΈ°λ³Έ XML κΈ°λ° μ€μ μ μ μ§μ μΌλ‘ μλ° κΈ°λ° μ€μ μΌλ‘ λ³ννλ κ²μ΄ κ°λ₯ν©λλ€.
5. @Configuration
κ³Ό @Component
μ μ°¨μ΄.
@Configuration
κ³Ό @Component
λ λͺ¨λ μ€νλ§ μ»¨ν
μ΄λμ λΉμ λ±λ‘ν μ μλ μ΄λ
Έν
μ΄μ
μ΄μ§λ§, κ·Έ λͺ©μ κ³Ό κΈ°λ₯μλ μ°¨μ΄κ° μμ΅λλ€.
-
@Configuration
- μ£Όλ‘ μ€μ ν΄λμ€μ μ¬μ©λ©λλ€.
- μ΄ ν΄λμ€λ
@Bean
μ΄λ Έν μ΄μ μ μ¬μ©ν΄ λΉμ μ μνκ³ , 컨ν μ΄λμ λ±λ‘ν μ¬λ¬ λΉμ νκ³³μμ κ΄λ¦¬ν©λλ€. - μ΄ λΉλ€μ μ£Όλ‘ μ±κΈν€μΌλ‘ κ΄λ¦¬λλ©°, κ΅¬μ± μμλ€μ κ΄κ³λ₯Ό μ€μ νλ λ° μ¬μ©λ©λλ€.
-
@Component
- μΌλ°μ μΌλ‘ λ¨μΌ λΉμ μλμΌλ‘ λ±λ‘ν λ μ¬μ©λ©λλ€.
- ν΄λμ€μ
@Component
λ₯Ό λΆμ΄λ©΄ μ€νλ§μ΄ μλμΌλ‘ ν΄λΉ ν΄λμ€λ₯Ό μ€μΊνμ¬ λΉμΌλ‘ λ±λ‘ν©λλ€. - λ³΄ν΅ νΉμ μν μ νλ κ°λ³ ν΄λμ€λ₯Ό λΉμΌλ‘ λ±λ‘ν λ μ¬μ©λ©λλ€.
6. κ²°λ‘ .
-
@Configuration
μ΄λ Έν μ΄μ μ μλ° κΈ°λ°μ μ€μ ν΄λμ€λ₯Ό μ μνλ λ° μ¬μ©λλ©°, μ€νλ§ μ»¨ν μ΄λμμ κ΄λ¦¬λ λΉμ λ±λ‘νλ μ€μν μν μ ν©λλ€. - μ΄λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ μ μ€μ μ λμ± λͺ ννκ³ λͺ¨λνλ λ°©μμΌλ‘ κ΄λ¦¬ν μ μμΌλ©°, XML κΈ°λ° μ€μ μ λ체νκ±°λ 보μνλ μ©λλ‘ μ¬μ©λ©λλ€.
-
Configuration
ν΄λμ€ λ΄μ λ©μλλ λΉμ μ μνκ³ μ΄λ₯Ό 컨ν μ΄λμ λ±λ‘νμ¬, μ€νλ§ μ ν리μΌμ΄μ μ λμμ μ μ΄νλ μ€μν κΈ°λ₯μ μνν©λλ€.
2οΈβ£ @Bean
μ΄λ
Έν
μ΄μ
@Bean
μ΄λ
Έν
μ΄μ
μ Spring Frameworkμμ λ©μλ μμ€μμ μ¬μ©λλ©°, ν΄λΉ λ©μλκ° λ°ννλ κ°μ²΄λ₯Ό μ€νλ§ μ»¨ν
μ΄λμ λΉ(Bean)μΌλ‘ λ±λ‘νκΈ° μν΄ μ¬μ©λ©λλ€.
μ΄ μ΄λ
Έν
μ΄μ
μ μ£Όλ‘ μλ° κΈ°λ°μ μ€μ ν΄λμ€(@Configuration
)μμ μ¬μ©λλ©°, λΉμ μμ± λ° μ΄κΈ°νλ₯Ό λ΄λΉνλ μν μ ν©λλ€.
1. @Bean
μ΄λ
Έν
μ΄μ
μ μ£Όμ κΈ°λ₯.
1. μ€νλ§ μ»¨ν μ΄λμ λΉ λ±λ‘.
-
@Bean
μ΄λ Έν μ΄μ μ΄ λΆμ λ©μλκ° λ°ννλ κ°μ²΄λ μ€νλ§ μ»¨ν μ΄λμ μν΄ κ΄λ¦¬λλ λΉμΌλ‘ λ±λ‘λ©λλ€. - μ΄ λΉμ μ€νλ§ μ ν리μΌμ΄μ μμ μμ‘΄μ± μ£Όμ (Depency Injection, DI)μ ν΅ν΄ λ€λ₯Έ ν΄λμ€μμ μ¬μ©ν μ μμ΅λλ€.
2. λ©μλ νΈμΆ μ λΉ λ°ν.
-
@Bean
λ©μλλ μ€νλ§ μ»¨ν μ΄λμμ νΈμΆλμ΄ ν΄λΉ λ©μλκ° λ°ννλ κ°μ²΄λ₯Ό κ΄λ¦¬ν©λλ€. - μ΄ λΉμ 컨ν μ΄λμμ μ¬λ¬ λ² μμ²λλλΌλ κΈ°λ³Έμ μΌλ‘ μ±κΈν€μΌλ‘ κ΄λ¦¬λ©λλ€.(μ¦, λμΌν μΈμ€ν΄μ€κ° λ°νλ¨).
3. μλ° κΈ°λ° μ€μ μ§μ.
-
@Bean
μ΄λ Έν μ΄μ μ μλ° κΈ°λ°μ μ€μ ν΄λμ€(@Configuration
)μμ μ¬μ©λμ΄, XML μ€μ μ λ체 ν μ μμ΅λλ€. - μ΄λ₯Ό ν΅ν΄ κ°μ²΄ κ°μ κ΄κ³λ μ΄κΈ°ν κ³Όμ μ νλ‘κ·Έλλ° λ°©μμΌλ‘ μ μν μ μμ΅λλ€.
2. μμ μ½λ
- λ€μμ
@Bean
μ΄λ Έν μ΄μ μ μ¬μ©νλ κ°λ¨ν μμ λλ€.
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}
3. μ€λͺ .
-
@Configuration
- μ΄ ν΄λμ€κ° μ€νλ§ μ€μ ν΄λμ€λ‘ μ¬μ©λ¨μ λνλ λλ€.
- μ΄ ν΄λμ€ μμ λΉμ μ μνλ λ©μλκ° ν¬ν¨λ©λλ€.
-
@Bean
- κ° λ©μλκ° λ°ννλ κ°μ²΄λ₯Ό μ€νλ§ μ»¨ν μ΄λμ λΉμΌλ‘ λ±λ‘ν©λλ€.
- μλ₯Ό λ€μ΄,
userService()
λ©μλλuserService
κ°μ²΄λ₯Ό λ°ννλ©°, μ΄ κ°μ²΄λ μ€νλ§ μ»¨ν μ΄λμ μν΄ λΉμΌλ‘ κ΄λ¦¬λ©λλ€.
4. λΉμ μλͺ μ£ΌκΈ°μ κ΄λ¦¬.
- μ±κΈν€ κ΄λ¦¬
- κΈ°λ³Έμ μΌλ‘ μ€νλ§ μ»¨ν
μ΄λλ
@Bean
μΌλ‘ λ±λ‘λ λΉμ μ±κΈν€μΌλ‘ κ΄λ¦¬ν©λλ€. - μ¦, μ¬λ¬ κ³³μμ κ°μ λΉμ μμ²νλλΌλ λμΌν μΈμ€ν΄μ€κ° λ°νλ©λλ€.
- κΈ°λ³Έμ μΌλ‘ μ€νλ§ μ»¨ν
μ΄λλ
- μ€μ½ν λ³κ²½ κ°λ₯
-
@Bean
μ΄λ Έν μ΄μ μ μ¬μ©ν λ μ€μ½νλ₯Ό μ§μ ν μ μμ΅λλ€. - μλ₯Ό λ€μ΄, λΉμ΄ μμ²λ λλ§λ€ μλ‘μ΄ κ°μ²΄λ₯Ό λ°ννλ νλ‘ν νμ μ€μ½νλ‘ λ³κ²½ν μ μμ΅λλ€.
- μ΄λ
@Scope
μ΄λ Έν μ΄μ μ ν¨κ» μ¬μ©νμ¬ μ€μ ν©λλ€.
-
5. @Bean
κ³Ό @Component
μ μ°¨μ΄
-
@Bean
-
@Bean
μ λ©μλ μμ€μμ μ¬μ©λλ©°, ν΄λΉ λ©μλκ° λ°ννλ κ°μ²΄λ₯Ό λΉμΌλ‘ λ±λ‘ν©λλ€. - μ£Όλ‘ μ¬λ° μ€μ ν΄λμ€μμ μ¬μ©λμ΄ μλμΌλ‘ λΉμ μ μνλ λ°©μμ λλ€.
- μ΄λ₯Ό ν΅ν΄ κ°λ°μκ° κ°μ²΄ μμ± λ‘μ§μ λͺ μμ μΌλ‘ μμ±ν μ μμ΅λλ€.
-
-
@Component
-
@Component
λ ν΄λμ€ μμ€μμ μ¬μ©λλ©°, μ€νλ§μ΄ ν΄λΉ ν΄λμ€λ₯Ό μ€μΊνμ¬ μλμΌλ‘ λΉμΌλ‘ λ±λ‘νκ² ν©λλ€. - κ°λ°μκ° λ³λμ λ©μλ μμ΄ ν΄λμ€ μ체λ₯Ό λΉμΌλ‘ λ±λ‘νλ μλ λΉ λ±λ‘ λ°©μμ λλ€.
-
@Service
,@Repository
,@Controller
λ@Component
μ νΉμνλ ννμ λλ€.
-
6. μΆκ° κΈ°λ₯
@Bean
νλΌλ―Έν°
-
μ΄λ¦ μ§μ
-
@Bean
μ΄λ Έν μ΄μ μ μ΄λ¦μ λͺ μμ μΌλ‘ μ§μ ν μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ λ©μλ μ΄λ¦μ΄ λΉ μ΄λ¦μ΄ λμ§λ§,@Bean(name = "customName")
κ³Ό κ°μ΄ λΉ μ΄λ¦μ λͺ μν μ μμ΅λλ€.
-
@Bean(name = "custromUserService")
public UserService userService() {
return new UserService(userRepository());
}
μμ‘΄μ± κ΄λ¦¬
-
@Bean
λ©μλλ λ€λ₯Έ λΉμ μμ‘΄μ±μΌλ‘ μ¬μ©ν μ μμ΅λλ€. - μμ μμμμ
userService()
λ©μλλuserRepository()
λ©μλμμ λ°νλUserRepository
λΉμ μ¬μ©ν©λλ€. - μ΄λ°ν λ°©μμΌλ‘ λΉ κ°μ μμ‘΄μ±μ μ€μ ν μ μμ΅λλ€.
7. κ²°λ‘
-
@Bean
μ΄λ Έν μ΄μ μ μ€νλ§μμ μλ° κΈ°λ°μΌλ‘ λΉμ μ μνκ³ , μ€νλ§ μ»¨ν μ΄λμ λ±λ‘ν λ μ¬μ©λ©λλ€. - μ£Όλ‘ μ€μ ν΄λμ€(
@Configuration
) λ΄μμ μ¬μ©λλ©°, νλ‘κ·Έλλ° λ°©μμΌλ‘ κ°μ²΄μ μμ±κ³Ό μ€μ μ κ΄λ¦¬νλ μν μ ν©λλ€. - μ΄ μ΄λ Έν μ΄μ μ μλμΌλ‘ λΉμ μ μν λ μ¬μ©λλ©°, XML μ€μ μ λ체νκ±°λ 보μνλ λ°©μμΌλ‘ μ¬μ©λ©λλ€.
-
@Component
μλ λ¬λ¦¬ λΉ μμ± λ‘μ§μ λ λͺ ννκ² μ μ΄ν μ μλ μ μ΄ νΉμ§μ λλ€.