Search
Duplicate
🧢

Application Context

개요

Spring에서는 빈의 생성과 의존성 주입 등을 제어하는 IoC 컨테이너인 Bean Factory가 존재한다.
빈의 생성과 의존성 주입 외에 추가적인 기능을 제공하기 위해 Bean Factory를 상속받아 확장한 Application Context를 주로 사용한다.
Application Context는 별도의 설정 정보를 토대로 IoC를 적용하여 빈의 생성, 의존성 주입 등의 제어 작업을 총괄한다
직접 객체를 생성하고 관계를 맺어주는 코드는 없으며 생성 정보와 연관 관계 정보에 대한 설정을 읽어 처리한다.
@Configuration과 같은 어노테이션이 대표적인 설정 정보이다.

Bean 요청 시 처리 과정

객체가 빈을 요청하면 ApplicationContext는 다음과 같은 과정을 거쳐 Bean을 반환한다.
1.
ApplicationContext@Configuration 어노테이션이 붙은 클래스들을 설정 정보로 등록해두고 해당 클래스 내부의 @Bean이 붙은 메소드들의 Bean을 각 메소드 명으로 생성한다.
2.
객체가 Bean을 요청한다.
3.
ApplicationContext는 자신의 Bean 목록에서 요청한 이름을 찾는다.
4.
ApplicationContext는 설정 클래스로부터 Bean 생성을 요청하고 생성된 Bean을 반환한다.
이때 Spring 내부에서 Reflection API를 통해 Bean Definition에 나오는 클래스의 이름을 이용하거나 Bean Factory를 이용해 Bean을 생성한다.

장점

객체는 @Configuration이 붙은 구체적인 팩토리 클래스를 알고 있을 필요가 없다.
어플리케이션이 확장됨에 따라 팩트리 클래스가 늘것이다. 이때 ApplicationContext가 없다면 객체는 원하는 객체를 가져오기 위해 어떤 팩토리 클래스에 의존해야하는 지 결정해야 한다.
반면에 ApplicationContext를 사용하면 팩토리가 아무리 많아져도 이에 직접 접근할 필요가 없어진다. 즉 일관된 방식으로 Bean을 가져올 수 있게 된다.
ApplicationContext는 IoC 서비스를 제공해주므로 프로그래머가 코드를 제어할 필요가 없다.
ApplicationContext는 객체의 생성과 의존성 주입 외에도 객체가 만들어지는 방식, 시점, 전략, 후처리 등 다양한 기능을 지원한다.
ApplicationContext를 통해 다양한 Bean 탐색 방법을 제공할 수 있다.
Application Context에서 Bean 목록을 관리하여 Bean의 이름이나 타입 또는 어노테이션 설정 등으로 Bean을 찾을 수 있다.
이를 Dependency Lookup이라 부른다.