π[Spring] Spring λΉ(Bean).
Springμμ λΉ(Bean) μ Spring IoC 컨ν μ΄λμ μν΄ κ΄λ¦¬λλ κ°μ²΄λ₯Ό μλ―Έν©λλ€.
κ°λ¨ν λ§ν΄, λΉμ μ€νλ§ μ ν리μΌμ΄μ μ ν΅μ¬ κ΅¬μ± μμλ‘, κ°λ°μκ° μ μν κ°μ²΄(ν΄λμ€ μΈμ€ν΄μ€)κ° Springμ κ΄λ¦¬ νμ λμνλ κ²μ λ»ν©λλ€.
1οΈβ£ Spring λΉμ μ£Όμ κ°λ .
1. λΉ μ μ(Bean Definition)
- μ€νλ§ μ ν리μΌμ΄μ μμ λΉμ κ°λ°μκ° μ μν κ°μ²΄μ λλ€.
- λΉμ μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ μ μ€μν μλΉμ€, λ ν¬μ§ν 리, 컨νΈλ‘€λ¬ κ°μ κ°μ²΄λ€λ‘, μ€νλ§ μ»¨ν μ΄λμ μν΄ μλͺ μ£ΌκΈ°κ° κ΄λ¦¬λ©λλ€.
2. μ€νλ§ IoC(Inversion of Control) 컨ν μ΄λ.
- Spring IoC 컨ν μ΄λλ λΉμ μμ±, μ΄κΈ°ν, μ€μ , μλ©Έ λ±μ μλͺ μ£ΌκΈ°λ₯Ό κ΄λ¦¬ν©λλ€.
- κ°λ°μλ μ§μ κ°μ²΄λ₯Ό μμ±νκ±°λ μλ©Έμν€μ§ μκ³ , IoC 컨ν μ΄λμ κ·Έ μν μ 맑κΉλλ€.
- IoC 컨ν μ΄λλ λΉμ νμμ λ°λΌ μλμΌλ‘ μ£Όμ νκ³ κ΄λ¦¬ν©λλ€.
3. λΉ λ±λ‘.
- λΉμ XML μ€μ νμΌ, μλ° μ€μ ν΄λμ€, λλ μ΄λ Έν μ΄μ κΈ°λ°μΌλ‘ λ±λ‘ν μ μμ΅λλ€.
- μ΄λ Έν μ΄μ κΈ°λ°μΌλ‘ λΉμ λ±λ‘νλ λ°©μμ΄ Spring Bootμμλ μ£Όλ‘ μ¬μ©λ©λλ€.
2οΈβ£ λΉμ μ μμ μμ± λ°©μ.
1. μ΄λ Έν μ΄μ κΈ°λ° λΉ λ±λ‘(Spring Bootμμ μμ£Ό μ¬μ©)
λΉμ μμ±νλ κ°μ₯ μΌλ°μ μΈ λ°©λ²μ ν΄λμ€μ μ΄λ Έν μ΄μ μ λΆμ¬ λΉμΌλ‘ λ±λ‘νλ λ°©μμ λλ€.
-
@Component
- μΌλ°μ μΈ λΉμΌλ‘ λ±λ‘ν λ μ¬μ©λ©λλ€.
-
@Sevice
,@Repository
,@Controller
- κ°κ° μλΉμ€, λ ν¬μ§ν 리, 컨νΈλ‘€λ¬ μν μ νλ λΉμ λ±λ‘ν λ μ¬μ©λλ λ ꡬ체μ μΈ μ΄λ Έν μ΄μ μ λλ€.
μμ
@Component
public class MyService {
// μ΄ ν΄λμ€λ μ€νλ§ μ»¨ν
μ΄λμ μν΄ κ΄λ¦¬λλ λΉμ΄ λ©λλ€.
}
@Service
public class UserService {
// μ΄ ν΄λμ€λ @Serviceλ‘ λΉμΌλ‘ λ±λ‘λ©λλ€.
}
2. μλ° μ€μ ν΄λμ€μμ λΉ λ±λ‘
μλ° μ€μ νμΌμ μ¬μ©ν΄ λͺ
μμ μΌλ‘ λΉμ λ±λ‘ν μλ μμ΅λλ€.
μ΄ λ°©μμμλ @Configuration
κ³Ό @Bean
μ΄λ
Έν
μ΄μ
μ μ¬μ©ν©λλ€.
μμ
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
-
@Bean
μ΄λ Έν μ΄μ μ μ¬μ©ν΄ λ©μλκ° λ°ννλ κ°μ²΄λ₯Ό λΉμΌλ‘ λ±λ‘ν μ μμ΅λλ€.
3. XML κΈ°λ° μ€μ (νμ¬λ μ μ¬μ©λμ§ μμ)
κ³Όκ±°μλ XML νμΌμ μ¬μ©ν΄ λΉμ μ€μ νμΌλ, νμ¬λ μ£Όλ‘ μλ° μ€μ κ³Ό μ΄λ Έν μ΄μ κΈ°λ° μ€μ μ μ¬μ©ν©λλ€.
3οΈβ£ λΉμ μλͺ μ£ΌκΈ°
μ€νλ§ IoC 컨ν
μ΄λλ λΉμ μλͺ
μ£ΌκΈ°λ₯Ό κ΄λ¦¬ν©λλ€.
λΉμ μλͺ
μ£ΌκΈ°λ λ€μκ³Ό κ°μ΅λλ€.
1. μμ±.
- μ€νλ§ μ»¨ν μ΄λκ° λΉμ μμ±ν©λλ€.
2. μμ‘΄μ± μ£Όμ .
- μμ±λ λΉμ νμν μμ‘΄μ±(λ€λ₯Έ λΉ)μ΄ μ£Όμ λ©λλ€.
3. μ΄κΈ°ν.
- λΉμ΄ νμν μ€μ λ° μ΄κΈ°ν μμ μ μνν μ μμ΅λλ€.
4. μ¬μ©.
- λΉμ΄ μ ν리μΌμ΄μ λ΄μμ μ¬μ©λ©λλ€.
5. μλ©Έ.
- μ ν리μΌμ΄μ μ’ λ£ μ λΉμ΄ μλ©Έλ©λλ€.
3οΈβ£ λΉ μ€μ½ν
μ€νλ§ λΉμ μ¬λ¬ κ°μ§ μ€μ½νλ₯Ό κ°μ§ μ μμ΅λλ€.
μ€μ½νλ λΉμ΄ μμ±λκ³ μ¬μ©λλ λ²μλ₯Ό μ§μ νλ κ²μ λλ€.
1. μ±κΈν€(Singleton)
- μ€νλ§ μ ν리μΌμ΄μ λ΄μμ κΈ°λ³Έ μ€μ½νλ‘, 컨ν μ΄λμ ν λ²λ§ μμ±λ©λλ€.
- μ΄ν κ°μ λΉμ λν μμ²μ΄ μμ κ²½μ°, λμΌν κ°μ²΄ μΈμ€ν΄μ€κ° λ°νλ©λλ€.
- κ±°μ λλΆλΆμ μ€νλ§ λΉμ μ±κΈν€μΌλ‘ κ΄λ¦¬λ©λλ€.
2. νλ‘ν νμ (Prototype)
- λΉμ΄ μμ²λ λλ§λ€ μλ‘μ΄ μΈμ€ν΄μ€κ° μμ±λ©λλ€.
- μ¦, λ§€λ² λ€λ₯Έ κ°μ²΄κ° λ°νλ©λλ€.
3. Request, Session, Application
- μΉ μ ν리μΌμ΄μ μμ μ¬μ©λλ μ€μ½νλ‘, κ°κ° HTTP μμ²λΉ, μΈμ λΉ, λλ μλΈλ¦Ώ 컨ν μ€νΈλΉ μλ‘μ΄ λΉμ μμ±ν©λλ€.
4οΈβ£ μμ: μ±κΈν€ λΉ
@Service
public class UserService {
// μ΄ ν΄λμ€λ μ±κΈν€ λΉμΌλ‘ κ΄λ¦¬λ©λλ€.
}
- μ€νλ§ μ ν리μΌμ΄μ
λ΄μμ
UserService
λΉμ ν λ²λ§ μμ±λκ³ , μ ν리μΌμ΄μ μ 체μμ λμΌν κ°μ²΄λ‘ μ¬μ©λ©λλ€.
5οΈβ£ κ²°λ‘
μ€νλ§ λΉμ μ€νλ§ IoC 컨ν
μ΄λμ μν΄ κ΄λ¦¬λλ κ°μ²΄λ‘, μ ν리μΌμ΄μ
μ μ£Όμ κ΅¬μ± μμλ₯Ό μλ―Έν©λλ€.
λΉμ μ΄λ
Έν
μ΄μ
λλ μλ° μ€μ νμΌμ ν΅ν΄ λ±λ‘ν μ μμΌλ©°, μ€νλ§ μ»¨ν
μ΄λλ λΉμ μλͺ
μ£ΌκΈ°λ₯Ό μλμΌλ‘ κ΄λ¦¬ν©λλ€.
μ΄λ₯Ό ν΅ν΄ μμ‘΄μ± μ£Όμ
, κ°μ²΄ κ΄λ¦¬, κ·Έλ¦¬κ³ μ ν리μΌμ΄μ
μ λ°μ μ μ°μ±μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.