Today I Learned_220501
Spring Framework
Bean
Bean
- 스프링 컨테이너가 관리하는 자바 객체(ApplicationContext가 알고 있는 객체)
- 스프링 컨테이너에 의해 인스턴스화, 관리 , 생성된다.
- 빈 등록 방법
- @Component(@Controller 어노테이션 내부에 Component 존재) 어노테이션 사용 → 컴포넌트 스캐닝 방식
- @Bean 어노테이션 사용 → Configuration을 통한 직접 등록 방식
- 보통 싱글턴으로 존재
- 싱글턴 : 어떤 클래스가 최초 한번만 메모리를 할당하고 그 메모리에 객체를 만들어 사용하는 디자인 패턴
Bean Scope
- Spring은 기본적으로 Bean이 Singleton으로 생성하여 관리됨
- Container에서 한번 생성 후, Container가 사라질 때 동시에 사라진다.
- Singleton이기에 동일한 것을 참조
- Spring을 통해서 Bean을 주입받으면 주입받은 Bean은 동일한 객체이다.
Scope의 종류
- Singleton
- 하나의 Bean 정의에 대해서 컨테이너 내에 단 하나만 존재
- prototype
- 하나의 Bean 정의에 대해서 매번 다른 객체가 존재
Web Scope
웹 환경에서만 동작하는 특징을 가지고 있으며, 종료 시점까지 스프링 컨테이너가 관리한다.
클라이언트에게 서비스를 제공하다가 문제가 생겼을 때, 웹 스코프를 통해 공통된 포맷으로 관리가 가능하다.
- request (Spring MVC Web Application에서만 사용)
- HTTP request 생명주기 안에 단 하나의 객체만 존재
- session (Spring MVC Web Application에서만 사용)
- HTTP session 생명주기 안에 단 하나의 객체만 존재
- global session (Spring MVC Web Application에서만 사용)
- 하나의 global HTTP Session의 생명주기 안에 단 하나의 객체만 존재
- application
- 서블릿 컨텍스트와 동일한 생명주기를 가지는 스코프
- websocket
- 웹 소켓과 동일한 생명주기를 가지는 스코프
Bean 객체의 생명주기
객체 생성 → 의존 설정 → 초기화 → 소멸
- 스프링 컨테이너 초기화 시, 빈 객체 생성
- 빈 객체 생성 후, 의존성 주입
- 의존 설정이 완료되면 빈 객체 초기화
- 스프링 컨테이너 종료 시, 스프링 컨테이너는 빈 객체를 소멸