🌱 스프링 빈 (Spring Bean) 이란?
스프링 빈은 스프링 컨테이너에 의해 관리되는 자바 객체를 의미한다.
🌱 스프링 컨테이너
스프링 컨테이너는 빈의 생성부터 소멸까지 개발자 대신 관리해주는 공간을 말합니다.
- 빈의 생명주기를 관리
- 생성된 스프링 빈들에게 추가적인 기능을 제공
IoC와 DI의 원리가 스프링 컨테이너에 적용된다.
🌱 IoC (제어의 역전)
Inversion of Controll
말 그대로 개발자에게서 컨테이로 제어권이 역전 되었다는 뜻이다. 원래는 프로그래밍을 하는 개발자들이 직접 의존관계를 제어했다. 하지만 객체의 생성부터 생명주기의 관리까지 객체에 대한 제어권이 컨테이너로 넘어가게 됐다.
🌱 DI (의존성 주입)
IoC와 떼놓을 수 없는 DI는, IoC 프로그래밍 모델을 구현하는 방식 중 하나입니다. Spring에서는 DI라는 방식을 통해 IoC를, 즉 의존성 역전 제어를 하고 있다.
이곳에서 DI 자세하게 알아보기!
🌱 스프링 컨테이너 두 종류
1. 빈 팩토리 BeanFactory
- 빈을 등록, 생성, 조회, 반환 등 빈을 관리하는 기능을 담당한다.
- 빈의 정의는 즉시 로딩하지만, 실질적으로 빈을 필요로 하기 전까지는 인스턴스화 하지 않는다.
- getBean()이 호출되면, 팩토리는 의존성 주입을 이용해 빈을 인스턴스화하고 빈의 특성을 설정하기 시작한다. (빈의 일생이 시작됨!)
2. 어플리케이션 컨텍스트 ApllicationContext
- 빈 팩토리를 상속해서 조금 더 확장 & 향상된 컨테이너
- 빈 팩토리의 기능 + 스프링이 제공하는 각종 부가 서비스
🌱 빈 팩토리와 애플리케이션 컨텍스트와의 차이점
-
빈 팩토리
- 처음으로 getBean()이 호출된 시점에서야 해당 빈을 생성한다. (lazy loading)
-
애플리케이션 컨텍스트
- 컨텍스트 초기화 시점에 모든 싱글톤 빈을 미리 로드한다.
- 따라서 애플리케이션 기동 후에는 빈을 지연 없이 얻을 수 있음. (미리 빈을 생성해 놓아 빈이 필요할 때 즉시 사용할 수 있도록 보장)