스프링 컨테이너
스프링 프레임워크의 핵심 컴포넌트
컨테이너
의존관계 주입을 대신해 객체를 생성하고 관리하며 의존관계를 연결해주는 것
스프링 컨테이너
- 내부에 존재하는 애플리케이션 빈의 생명주기(빈의 생성, 관리, 제거 등의 역할)를 관리한다.
- 객체 간의 의존성을 낮추기 위해 사용된다.
💡빈(Bean) : 스프링 컨테이너에 등록된 객체
- new 연산자, 인터페이스 호출 등의 객체를 생성하는 일을 스프링 컨테이너가 대신해서 수행한다.
- 객체 생성과 같은 제어 흐름을 외부에서 관리하는 것
- ApplicationContext : 스프링 컨테이너, 인터페이스로 구현되어 있다.
- 해당 인터페이스를 통해 구현되어 진 것들이 스프링 컨테이너라고 할 수 있다.
💡 스프링 컨테이너 구현 : Configuration Metadata(구성정보)를 파라미터로 받아 사용
new AnnotationConfigApplicationContext(구성정보.class)
사용되는 애너테이션
- @Configuration : 구성정보를 담당하는 것을 설정할 때 사용
- @Bean : 해당 메서드를 통해 생성된 객체를 스프링 컨테이너에 자동적으로 등록
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
getBean()
메소드를 통해 빈을 인스턴스화 할 수 있다.
- @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용해 빈 등록을 한다.
- 빈을 등록, 생성, 조회하는 등의 관리 역할을 한다.
ApplicationContext
BeanFactory
의 기능을 상속받아 제공
- 빈을 관리하는
BeanFactory
뿐만 아니라 그 외의 부가 기능을 제공한다
- MessageSource: 메세지 다국화를 위한 인터페이스
- EnvironmentCapable: 개발, 운영 등 환경변수 등으로 나눠 처리하고, 애플리케이션 구동 시 필요한 정보들을 관리하기 위한 인터페이스
- ApplicationEventPublisher: 이벤트 관련 기능을 제공하는 인터페이스
- ResourceLoader: 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회
💡 BeanFactory와 ApplicationContext은 같은 기능을 하지만 ApplicationContext의 부가기능 덕분에 ApplicationContext를 더 사용하는 편이다.
빈(Bean)
스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트
빈의 정의
- 인스턴스화된 객체
- 스프링 컨테이너에 등록된 객체 -> 스프링 빈
빈의 특징
- 빈은 클래스의 등록정보, getter/setter 메서드를 포함한다.
- 컨테이너에 사용되는 설정 메타데이터로 생성된다.
빈 접근 방법
- ApplicationContext 사용하여 빈을 불러와야 한다.
- getBean(빈이름, 타입) 또는 getBean(타입)을 사용한다.