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) 빈을 생성해서 쓸건지 설정해서 쓸 수도 있다.
'스프링' 카테고리의 다른 글
JPA 연관 관계 정리 / @OneToMany 단방향의 단점 (0) | 2022.03.10 |
---|---|
Annotation - @Entity (0) | 2022.03.09 |
[SpringBoot] PasswordEncoder 적용하기 (0) | 2022.02.18 |
스프링 삼각형과 설정 정보 - AOP / PSA (0) | 2022.02.09 |
의존성주입 DI(Dependency InJection)의 종류 (0) | 2022.02.09 |