Java로 IoC 컨테이너 구성하기

까망사과·2023년 6월 4일
0

Spring 찍먹하기

목록 보기
1/5

🍍 IoC 컨테이너의 구성 정보

Spring 컨테이너는 생성, 구성, 보관할 Bean에 대한 구성(configuration) 메타데이터가 필요하다. 이러한 메타데이터는 XML, Java 어노테이션, Java 코드 형식 중 하나로 작성할 수 있다.

여기서는 가장 많이 쓰이는 방식인 Java 코드 형식에 대해 알아보도록 한다.


🍉 구성 정보 클래스 작성하기

  • @Configuration
    컨테이너의 구성 정보를 포함하는 config 클래스에 단다. config 클래스의 주요 목적은 Bean에 대한 정의(definition)를 제공하는 것이다.

  • @Bean
    config 클래스 안의 메서드에 단다. 해당 메서드는 컨테이너가 관리해야 하는 Bean을 생성, 구성, 초기화한다.

    • @Bean이 달린 메서드가 @Bean이 달린 다른 메서드를 호출하도록 하여 Bean 간의 의존 관계를 정의할 수 있다.
@Configuration
class AppConfig {
	
    @Bean
    BeanExample beanExample() {
    	return new BeanExample();
    }
    
    ...
}

🍋 컨테이너 생성하기

ApplicationContext 인터페이스의 구현 클래스를 인스턴스화하여 컨테이너를 생성한다. 여기서는 AnnotationConfigApplicationContext를 사용한다.

이 때 다음 중 하나의 방법을 사용하여 config 클래스를 컨테이너에 전달해야 한다.

  • 컨테이너의 생성자의 인자로 전달한다.
  • 컨테이너를 먼저 인스턴스화한 뒤, 메서드를 통해 동적으로 전달한다.

컨테이너 클래스의 생성자에 전달하기

config 클래스의 정보를 나타내는 Class 객체를 생성자에 전달한다.

AnnotationConfigApplicationContext context = 
    new AnnotationConfigApplicationContext(AppConfig.class);

BeanExample beanExample = context.getBean(BeanExample.class);
beanExample.doSomething();

register()를 통해 동적으로 전달하기

register(Class...)를 호출하여 config 클래스의 Class 객체를 인자로 전달한다. 구성 정보를 모두 전달한 뒤 Bean을 사용하기 전 refresh()를 호출해야 한다.

AnnotationConfigApplicationContext context = 
    new AnnotationConfigApplicationContext();

context.register(BeanExample.class);
context.refresh();

BeanExample beanExample = context.getBean(BeanExample.class);
beanExample.doSomething();

🍌 Bean 정의하기

config 클래스에서 Bean을 정의하는 메서드에 @Bean 어노테이션을 달아야 한다. 정의된 Bean은 기본적으로 해당 메서드의 이름으로 등록된다.


🔍 참고자료

Java-based Container Configuration :: Spring Framework

0개의 댓글