EEALL@ONCE
π±λΉ μ€μ λ©ν μ 보 λ³Έλ¬Έ
λΉμ μ€μ λ©ν μ 보λ μ€νλ§ μ»¨ν
μ΄λμκ² μ΄λ€ κ°μ²΄λ₯Ό μμ±νκ³ μ΄λ»κ² 쑰립ν΄μΌ νλμ§μ λν μ 보λ₯Ό μ 곡ν©λλ€.
μ€νλ§μμ λΉ μ€μ λ©ν μ 보λ₯Ό μ 곡νλ λ°©λ²μ ν¬κ² μΈ κ°μ§μ
λλ€.
1. **XML μ€μ **: κ³Όκ±°μ μ£Όλ‘ μ¬μ©λλ λ°©μμΌλ‘, XML νμΌμ λΉμ μ μμ μμ‘΄μ±μ λͺ
μν©λλ€.
2. **Java Config**: Java ν΄λμ€λ₯Ό μ¬μ©νμ¬ λΉ μ€μ μ 보λ₯Ό μ 곡νλ λ°©μμ
λλ€. μ£Όλ‘ `@Configuration` μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ κ΅¬ννλ©°, `@Bean` μ΄λ
Έν
μ΄μ
μ μ΄μ©νμ¬ λΉμ μ μν©λλ€.
3. **Annotation κΈ°λ° μ€μ **: ν΄λμ€λ λ©μλμ μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ λΉμ μ€μ νλ λ°©μμ
λλ€. μ£Όμ μ΄λ
Έν
μ΄μ
μΌλ‘λ `@Component`, `@Service`, `@Repository`, `@Controller` λ±μ΄ μμ΅λλ€. μ΄ λ°©μμ μ£Όλ‘ μ»΄ν¬λνΈ μ€μΊμ ν΅ν΄ λΉμ μλμΌλ‘ μ°Ύμ λ±λ‘ν©λλ€.
Annotation κΈ°λ° μ€μ *
@Configuration
public class MyConfig {
@Bean
public MyService myService() {
return new MyService();
}
@Bean
public MyRepository myRepository() {
return new MyRepository();
}
@Bean
public MyController myController() {
return new MyController(myService());
}
}
XML μ€μ *
<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myService" class="com.example.MyService" />
<bean id="myRepository" class="com.example.MyRepository" />
<bean id="myController" class="com.example.MyController">
<constructor-arg ref="myService" />
</bean>
</beans>
`BeanDefinition`μ μ€νλ§ νλ μμν¬μμ λΉ(Bean)μ μ μνλ λ©ν μ 보λ₯Ό λ΄κ³ μλ μΈν°νμ΄μ€μ
λλ€. μ΄λ₯Ό ν΅ν΄ μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ΄λ€ μμ±μ μ€μ ν΄μΌ νλμ§μ λν μ 보λ₯Ό μ 곡ν©λλ€. `BeanDefinition`μ λΉμ λ©ν μ 보λ₯Ό μΆμννμ¬ κ΄λ¦¬νλ©°, XML μ€μ , Java Config, Annotation κΈ°λ° μ€μ λ±μμ μ¬μ©λ©λλ€.
`BeanDefinition`μ΄ μ 곡νλ μ£Όμ λ©ν μ 보λ λ€μκ³Ό κ°μ΅λλ€:
1. **λΉ ν΄λμ€λͺ
(Bean Class Name)**: μμ±ν λΉμ ν΄λμ€ μ΄λ¦μ λνλ
λλ€.
2. **μμ±μ μΈμ (Constructor Arguments)**: μμ±μλ₯Ό ν΅ν΄ λΉμ μμ±ν λ νμν μΈμλ€μ λνλ
λλ€.
3. **νλ‘νΌν° (Properties)**: λΉμ νλ‘νΌν°λ€μ μ€μ νλ κ°λ€μ ν¬ν¨ν©λλ€.
4. **Scope**: λΉμ μλͺ
μ£ΌκΈ° λ²μλ₯Ό λνλ
λλ€. (`singleton`, `prototype` λ±)
5. **Lazy Initialization**: λΉμ΄ νμν μμ κΉμ§ μ΄κΈ°νλ₯Ό λ¦μΆλμ§ μ¬λΆλ₯Ό λνλ
λλ€. μ¦ μ€νλ§ μ»¨ν
μ΄λλ₯Ό μμ±ν λ λΉμ λ°λ‘ μμ±νμ§μκ³ μ€μ λΉμ μ¬μ©ν λ κΉμ§ μ΅λν μμ±μ μ§μ°μ²λ¦¬
6. **μμ‘΄μ± (Dependencies)**: λ€λ₯Έ λΉλ€κ³Όμ μμ‘΄μ±μ λνλ΄λ μ 보μ
λλ€.
7. **Initializer Methods**: λΉ μ΄κΈ°ν μ νΈμΆν λ©μλλ₯Ό λνλ
λλ€.
8. **Destroy Methods**: λΉ μλ©Έ μ νΈμΆν λ©μλλ₯Ό λνλ
λλ€.
9. **Autowiring Mode**: μμ‘΄μ± μ£Όμ
μ μν μλ μ°κ²° λͺ¨λλ₯Ό λνλ
λλ€.
κ°λ¨ν `BeanDefinition` μμλ₯Ό λ³΄κ² μ΅λλ€:
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(MyService.class);
beanDefinition.getPropertyValues().add("message", "Hello, Spring!");
beanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);
μ μμμμλ `MyService` ν΄λμ€λ₯Ό λΉμΌλ‘ λ±λ‘νκ³ , `message` νλ‘νΌν°μ κ°μ μ€μ νλ©°, `singleton` μ€μ½νλ‘ λΉμ κ΄λ¦¬νλλ‘ μ€μ νμ΅λλ€.
κ·Όλ° λ©ν μ 보λ ?
λ©ν μ 보(Metadata)λ λ°μ΄ν°μ λν λ°μ΄ν°λ‘, μ΄λ€ μ 보μ λν μ€λͺ
μ΄λ ꡬ쑰λ₯Ό λνλ΄λ λ°μ΄ν°λ₯Ό μλ―Έν©λλ€. μ€νλ§ νλ μμν¬μμ λ©ν μ 보λ μ£Όλ‘ νλ‘κ·Έλ¨μ ꡬμ±, μ€μ , μ€ν λ±μ μ€λͺ
νκ³ κ΄λ¦¬νλ λ° μ¬μ©λ©λλ€.
μ¬λ¬ κ°μ§ μμλ₯Ό ν΅ν΄ μ€νλ§μμ μ¬μ©λλ λ©ν μ 보λ₯Ό μ΄ν΄ν΄λ³΄κ² μ΅λλ€:
1. **λΉ(Bean) λ©ν μ 보**: λΉ(Bean) μ μμμ μ¬μ©λλ λ©ν μ 보λ ν΄λΉ λΉμ ν΄λμ€λͺ
, μμ±μ μΈμ, νλ‘νΌν° μ€μ λ±μ ν¬ν¨ν©λλ€. μ΄ μ 보λ λΉμ μμ±, κ΄λ¦¬, μμ‘΄μ± μ£Όμ
λ±μ μ€νλ§ μ»¨ν
μ΄λκ° μνν λ μ¬μ©λ©λλ€.
2. **μ λ
Έν
μ΄μ
(Annotation)**: μ€νλ§μμ μ λ
Έν
μ΄μ
μ ν΄λμ€λ λ©μλμ λΆκ°μ μΈ μ 보λ₯Ό μ 곡νλ μν μ ν©λλ€. `@Component`, `@Service`, `@Autowired` λ±μ μ λ
Έν
μ΄μ
μ ν΄λμ€κ° λΉμΌλ‘ λ±λ‘λκ±°λ μμ‘΄μ± μ£Όμ
μ λ°μμΌ ν¨μ λνλ΄λ©°, μ΄λ μ€νλ§μ λ©ν μ λ³΄λ‘ νμ©λ©λλ€.
3. **νλ‘νΌν° νμΌ(Properties file)**: `application.properties`λ `application.yml`κ³Ό κ°μ νλ‘νΌν° νμΌμ μ ν리μΌμ΄μ
μ μ€μ μ 보λ₯Ό λ©ν λ°μ΄ν°λ‘ ν¬ν¨ν©λλ€. λ°μ΄ν°λ² μ΄μ€ μ°κ²° μ 보, μλ² ν¬νΈ λ±μ μ€μ νλ λ° νμ©λ©λλ€.
4. **AOP(Aspect-Oriented Programming) μ€μ **: AOPλ λ©ν λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ ν‘λ¨ κ΄μ¬ μ¬ν(cross-cutting concern)μ λΆλ¦¬νκ³ κ΄λ¦¬νλ κΈ°λ²μ
λλ€. λ©ν μ 보λ₯Ό ν΅ν΄ μ΄λ μ§μ μμ μ΄λ€ λ‘μ§μ μ μ©ν΄μΌ νλμ§ μ€μ ν μ μμ΅λλ€.
5. **리νλ μ
(Reflection)**: μλ° λ¦¬νλ μ
μ μ€ν μ€μΈ μ ν리μΌμ΄μ
μ ν΄λμ€, λ©μλ, νλ λ±μ μ 보λ₯Ό μ‘°μ¬νκ³ μ‘°μνλ λ° μ¬μ©λ©λλ€. μ΄λ₯Ό ν΅ν΄ λ©ν μ 보λ₯Ό λμ μΌλ‘ λΆμνκ³ νμ©ν μ μμ΅λλ€.
λ©ν μ 보λ νλ‘κ·Έλ¨μ μ€νκ³Ό κ΄λ¦¬λ₯Ό λλ μ€μν κ°λ
μΌλ‘, μ€νλ§ νλ μμν¬μμλ μ΄λ¬ν λ©ν μ 보λ₯Ό νμ©νμ¬ μ ν리μΌμ΄μ
μ μ€μ κ³Ό λμμ μ‘°μ νκ³ μ μ΄ν©λλ€.
'Springπ±' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π± μΈν 리μ μ΄ μ€ν μλ λΉ λ₯΄κ² νλ λ² (0) | 2023.10.16 |
---|---|
π± μΉ μ ν리μΌμ΄μ κ³Ό μ±κΈν€ / μ±κΈν€ ν¨ν΄μ λ¬Έμ μ (0) | 2023.08.19 |
π± μ€νλ§ μ»¨ν μ΄λμ μ€νλ§ λΉ - xml, java μ€μ (0) | 2023.07.31 |
π± BeanFactoryτ§¬& ApplicationContext (0) | 2023.07.29 |
π± μ€νλ§ λΉ μ‘°ν - μμ κ΄κ³ getBean() / getBeansOfType(.class) (0) | 2023.07.29 |