개념 및 기능
스프링 프레임워크의 핵심 컴포넌트이다.
자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들(bean)에게 추가적인 기능을 제공한다.
스프링 컨테이너를 통해 원하는 만큼 객체를 가질 수 있다.
의존성 주입을 통해 애플리케이션의 컴포넌트를 관리할 수 있다.
서로 다른 빈을 연결하여 애플리케이션 빈을 연결하는 역할을 한다.
사용 이유
객체 간의 의존성을 낮추어 결합도는 낮추고, 높은 캡슐화를 위해 사용된다.
종류

스프링 컨테이너는 BeanFactory와 ApplicationContext 두 종류의 인터페이스로 구현되어 있다.
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 빈의 생성과 관계 설정 같은 제어를 담당하는 IoC 오브젝트
- getBean() 메서드를 통해 빈을 인스턴스화 할 수 있음
- @Bean 어노테이션이 붙은 메서드의 이름을 스프링빈의 이름으로 사용하여 빈을 등록
ApplicationContext
- 빈팩토리의 기능을 상속받아제공
- 빈을 관리하고, 검색하는 기능을 빈팩토리가 제공하고, 그 외의 기능을 제공
- 부가 가능 : MessageSource, EnvironmentCapable, ApplicationEventPublisher, ResourceLoader
생성 과정
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
AppConfig 등의 구성 정보를 지정하여 스프링 컨테이너를 생성한다. 애플리케이션 클래스는 구성 메타데이터와 결합되어 ApplicationContext를 생성하고, 초기화한다.
@Configuration
public class AppConfig {
@Bean
public TestService testService() {
return new TestServiceImpl();
}
}
AppConfig가 다음과 같이 설정되어있다고 하면, getBean()을 이용해서 스프링 빈을 얻을 수 있다.
TestService testService = applicationContext.getBean("testService", TestService.class);
* 빈 이름은 항상 다른 이름을 부여해야한다.