본문 바로가기

SpringFramework Core - I. IoC 컨테이너/1. 스프링 IoC 컨테이너와 Beans 소개

2.3. 컨테이너 사용하기

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-client

 

 

ApplicationContext는 등록된 bean들과 의존성들을 관리할 수 있도록 해주는 보다 진화된 팩토리를 위한 인터페이스이다. 'T getBean(String name, Class<T> requiredType)' 메소드를 사용함으로써 bean의 인스턴스를 반환받을 수 있다.

 

ApplicationContext는 bean 정의를 읽을 수 있게 해주며 그들에게 접근할 수 있게 해준다. 다음 예시는 이를 보여준다.

// bean을 생성하고 설정한다.
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

// 설정된 인스턴스를 불러온다.
PetStoreService service = context.getBean("petStore", PetStoreService.class);

// 설정된 인스턴스를 사용한다.
List<String> userList = service.getUsernameList();

 

Groovy 설정에서는, 부트스트래핑의 모습이 유사하다. Groovy를 인식할 수 있으며, 동시에 XML bean 정의도 이해할 수 있는, 다른 context 구현 클래스를 가지고 있다. 다음은 Groovy 설정의 예시다.

ApplicationContext context = new GenericGroovyApplicationContext("services.groovy", "daos.groovy");

 

 

변형된 형태로서 가장 유연한 것은 reader delegates와 결합된 GenericApplicationContext이다. 다음은 XML 파일을 위한 XmlBeanDefinitionReader와 함께 그 예시를 보여준다.

GenericApplicationContext context = new GenericApplicationContext();

new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml");

context.refresh();

Groovy 파일들을 위해서는 GroovyBeanDefinitionReader를 사용할 수 있다. 다음 예시를 보자.

GenericApplicationContext context = new GenericApplicationContext();

new GroovyBeanDefinitionReader(context).loadBeanDefinitions("services.groovy", "daos.groovy");

context.refresh();

마찬가지로 위와 같은 reader delegate들을 ApplicationContext에도 똑같이 섞어 넣을 수 있다. 이는 bean의 정의를 다양한 설정 소스들로부터 읽어올 수 있게 한다.

 

그리고나서 bean들의 인스턴스를 getBean을 통해 반환받을 수 있다. ApplicationContext 인터페이스는 몇 가지 다른 방식의 bean 반환 메소드들을 가지고 있다. 하지만 이상적으로는 애플리케이션 코드가 그것을 사용하지 않는 것이 좋다. 애플리케이션 코드는 getBean() 메소드를 전혀 호출하지 않음으로써 스프링 API에 대한 의존성을 전혀 갖지 않는 것이 좋다. 예를 들어, '스프링의 웹 프레임워크들과의 결합'은 다양한 웹 프레임워크 컴포넌트들(컨트롤러나 JSF-managed bean과 같은)을 위해 의존성 주입 기능을 제공한다. autowiring 어노테이션 같은 메타데이터를 통해 특정 bean에 대한 의존성을 선언할 수 있다.