1. Introduction to the Spring IoC Container and Beans
IoC (Inversion of Control)
- 전통적으로 애플리케이션의 객체 생성, 생명 주기 관리는 개발자가 작성한 코드에 의해 제어됩니다.
- IoC는 이러한 제어 흐름의 주체를 프레임워크나 컨테이너가 담당하도록 하는 매커니즘입니다.
- 프레임워크나 컨테이너가 주요 제어 흐름을 담당하게 하여, 개발자가 비즈니스 로직에 집중할 수 있게 합니다.
DI (Dependency Injection)
- IoC의 한 형태로, 객체의 의존성을 외부에서 주입하는 기법입니다.
- 의존성 주입을 개발자가 직접 코드로 수행하는 것이 아닌, 프레임워크의 IoC Container에 의해 자동으로 수행됩니다.
IoC Container
- Spring에서 객체의 생성 및 관리, 의존성 주입을 담당하는 컴포넌트입니다.
- IoC Container의 명세와 구현체가 제공됩니다.
BeanFactory (org.springframework.beans)
- 오브젝트 생성 및 관리 역할을 담당하는 인터페이스입니다.
ApplicationContext (org.springframework.context)
- BeanFactory의 확장 인터페이스로, IoC Container의 모든 기능을 제공하는 인터페이스입니다.
- 기능
- AOP : 통합적인 AOP 기능을 쉽게 사용할 수 있게 합니다.
- i18n : 국제화를 위한 Message resourece handling 기능을 제공합니다.
- Event Publishing : 이벤트 발행과 처리를 지원합니다.
- Application-layer 컨텍스트 : 웹 애플리케이션 등의 특정 유형에 특화된 구현체를 제공합니다.
Bean
- 애플리케이션의 핵심 역할을 하는 오브젝트입니다.
- 애플리케이션을 구성하는 실제 객체입니다.
- IoC Container에 의해 생성되고 관리됩니다.
- Configuration Metadata를 기반으로 생성됩니다.
2. Container Overview
Configuration Metadata
- 개발자가 Spring Ioc Container에게 Bean의 객체화, 구성 및 조립 방법을 지시합니다.
- Configuration Metadata을 통해 개발자는 Bean 구성을 풍부하게 표현할 수 있습니다.
- 애플리케이션 클래스가 Configuration Metadata와 결합되어 Bean이 생성됩니다.
- ApplicationContext는 Configuration Metadata 기반으로 Bean을 생성하고 관리합니다.
- 다양한 Configuration metadata 방식에 따라 ApplicationContext의 구현체가 제공됩니다.
XML
- 전통적으로 Configuration Metadata을 정의하는 방식입니다.
<?xml version="1.0" encoding="UTF-8"?>
<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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>
<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>
</beans>
- <import/> 요소를 사용하여 다른 파일(들)에서 빈 정의를 로드할 수도 있습니다.
- Spring에서 제공하는 XML 네임스페이스의 선택에 따라 단순한 빈 정의를 넘어서 추가 구성 기능들을 사용할 수 있습니다.
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
- ClassPathXmlApplicationContext
- xml 형식의 configuration metadata를 로드합니다.
- 애플리케이션 컨텍스트 생성자를 사용하여 XML 조각들로 빈 정의를 로드할 수 있습니다.
- FileSystemXmlApplicationContext
- file system에서 xml 형식의 configuration metadata를 로드합니다.
Java Code
- XML 파일이 아닌 Java 코드를 사용하여 Bean 정의를 할 수 있습니다.
- @Configuration, @Bean, @Import, @DependsOn
Annotations
- 어노테이션을 사용하여 Bean 생성, 의존성 주입, 라이프사이클 관리 등의 작업을 간편하게 수행할 수 있습니다.
- @Component, @Service, @Repository, @Controller, @Autowired, @Qualifier
- @ComponentScan
AnnotationConfigApplicationContext
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
출처
'Spring > Spring' 카테고리의 다른 글
[Spring][Core] 2-5. Bean: Dependency Injection (0) | 2023.10.14 |
---|---|
[Spring][Core] 2-4. Bean: Bean Scopes (0) | 2023.10.14 |
[Spring][Core] 2-3. Bean: Naming Beans (0) | 2023.10.14 |
[Spring][Core] 2-2. Bean: Instantiating Beans (0) | 2023.10.14 |
[Spring][Core] 2-1. Bean: BeanDefinition (1) | 2023.10.14 |