Spring 컨테이너 생성 과정
스프링 컨테이너를 설정하기 위해 XML 파일이나 자바 클래스를 사용하여 애플리케이션의 구성 정보를 정의한다. 예를 들어, XML 파일에서는 <bean> 태그를 사용하여 객체를 정의하고, 자바 클래스에서는 @Configuration 어노테이션과 @Bean 어노테이션을 사용할 수 있다.
<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="myBean" class="com.example.MyClass"/>
</beans>
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyClass myBean() {
return new MyClass();
}
}
스프링 컨테이너는 ApplicationContext 인터페이스의 구현체를 사용하여 생성된다. 일반적으로 ClassPathXmlApplicationContext 또는 AnnotationConfigApplicationContext 클래스를 사용하여 컨테이너를 생성한다.
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
컨테이너가 생성되면 정의된 빈(객체)이 초기화된다. 이 과정에서 의존성 주입이 이루어지고, 필요한 경우 @PostConstruct 어노테이션이 붙은 메서드가 호출된다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(new MemoryMemberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
//return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
}
초기화가 완료된 후, 애플리케이션의 다른 구성 요소에서 컨테이너를 통해 빈을 요청하여 사용할 수 있다.
MyClass myBean = context.getBean(MyClass.class);
애플리케이션이 종료될 때는 ApplicationContext를 종료하여 사용된 리소스를 해제한다. 일반적으로 스프링 부트 애플리케이션에서는 JVM 종료 시 자동으로 처리된다.
스프링 컨테이너는 애플리케이션의 객체 생명주기를 관리하고 의존성을 주입하는 역할을 한다. 이를 통해 코드의 모듈성을 높이고 유지보수를 용이하게 한다.