본문 바로가기

스프링

Spring Bean

Bean의 개념과 생성원리에 대해 알아보자.

 

Bean이란?

IoC컨테이너가 관리하는 자바객체를 부르는 용어로 IoC 컨테이너에 의해 인스턴스화, 관리, 생성된다.

new연산자로 객체를 생성했을 때는 Bean이 아니며, ApplicationContext.get()으로 얻을 수 있는 객체를 말한다.

Bean Container는 의존성 주입을 통해 Bean 객체를 사용할 수 있도록 해준다. Bean은 보통 Singleton으로 존재한다.

 

싱글톤패턴 : 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴

 

생성방식

Component Scanning

IoC 컨테이너를 만들고 그 안에 Bean을 등록할 때 사용하는 인터페이스들을 Life Cycle Callback이라 부른다.

Life Cycle Callback 중에 @Component가 붙어있는 모든 Class의 인스턴스를 생성해 Bean으로 등록하는 작업을 수행하는 어노테이션 프로세서가 등록되어있다.

 

@ComponentScan @Component이 부여된 Class를 찾아 자동으로 Bean으로 등록해주는 역할을 한다.

package의 모든 Class를 찾아 다니며, @Component나 @Component를 사용하는 다른 Annotation을 사용하는 Class를 찾는다. Stereotype Annotation들은 내부적으로 @Component을 사용한다.

Stereotype Annotation(@Controller, @Service, @Repository 등)

빈을 직접 등록하는 방법은 환경에 따라 xml, BeanAnnotation을 통한 자바소스설정이 있다.

 

Bean Scope

빈이 앱 구동되는 동안 한개만 사용해서 쓸 것인지, HTTP요청마다 생성해서 사용할 것인지 결정하는 것.

스프링은 기본적으로 모든 빈을 싱글톤으로 생성관리하게되서 컨테이너에서 한번 생성 후, 컨테이너가 사라질 때 같이 제거된다. 때에 따라서는 HTTP요청마다 (Request) 다른 빈을 생성해서 쓸건지, 매번 사용될 때 마다 (Prototype) 빈을 생성해서 쓸건지 설정해서 쓸 수도 있다.