스프링 프레임워크 문서 읽기
- 챕터 1. 개요
챕터 2. 핵심 기술
2.1. IoC 컨테이너
2.1.1 스프링 IoC 컨테이너와 빈즈Beans에 대한 소개
2.1.2. 컨테이너 개요
2.1.3. 빈Bean 개요
2.1.4. 의존 관계Dependencies
2.1.5. 빈 스코프Bean Scopes
챕터 5. 웹 서블릿 스택
5.1. 스프링 웹 MVC
5.1.3. 애너테이션Annotated 컨트롤러
4/7
1.3. 빈Bean 개요
스프링 IoC 컨테이너는 하나 이상의 빈을 관리한다. 이 빈즈는 개발자가 컨테이너에 제공한 설정 메타데이터를 통해 생성된다.
컨테이너 내부에는 이러한 빈 정의들이 BeanDefinition
객체로서 표현되어 있다. 그리고 아래와 같은 메타데이터들도 포함되어 있다.
- 패키지 단위의 클래스명
: 일반적으로, 정의가 이뤄진 빈의 실제 클래스 구현이 있다. - 빈이 역할에 대한 설정 정보들
: 빈이 컨테이너 안에서 무엇을 해야하는지 정해져 있다. - 해당 빈에 요구되는 다른 빈에 대한 참조 사항
: 이러한 참조를 컬래버레이터 또는 의존관계(의존성)라고도 부른다. - 새로 생성되는 객체에서 설정해야 할 다른 사항들
: 예를 들어, 커넥션 풀을 관리하는 빈에서는 사용 가능한 연결들의 수나 풀의 크기 제한과 같은 것들을 들 수 있다.
이러한 메타데이터는 각각의 빈 정의를 이루는 속성 정보들a set of properties로 변환된다. 속성들로는 아래의 테이블을 참조하면 된다.
Property | Explained in… |
Class | Instantiating Beans |
Name | Naming Beans |
Scope | Bean Scopes |
Constructor arguments | Dependency Injection |
Properties | Dependency Injection |
Autowiring mode | Autowiring Collaborators |
Lazy initialization mode | Lazy-initialized Beans |
initialization method | Initialization Callbacks |
Destruction method | Destruction Callbacks |
빈 메타데이터, 그리고 기본적으로 제공되는 싱글톤 인스턴스들은 최대한 일찍 등록되어야 한다. 왜냐하면 자동주입, 그리고 다른 인트로스펙션 단계에서 컨테이너가 적절한 판단을 내릴 수 있도록 하기 위해서이다. 존재하는 메타데이터나 싱글톤 인스턴스를 오버라이딩 하는 건 어떤 부분에선 지원이 되는 반면, 런타임 단계에서 새로운 빈을 등록하는 건 공식적으로 지원되지 않을 뿐더러 이 경우에 빈 컨테이너에 대하여 동시 접근 예외concurrent access exceptions나 모순된 상태inconsistent state(혹은 두 가지 모두)가 발생할 수 있기 때문이다.
1.3.1. 빈즈 명명Naming Beans
① 빈 정의 이외에 빈 alias 명명</span>
1.3.2. 빈즈 인스턴스화하기Instantiating Beans
빈 정의는 하나 이상의 객체를 생성하는 것에 관한 필수 레시피이다. 그리고 컨테이너는 요청을 받았을 때 이 레시피를 통해 특정 이름의 빈을 참조하며, 바로 이 빈 정의에 의해 캡슐화된 설정 메타데이터를 사용하여 실제 객체를 생성(또는 취득)한다.