Spring Bean
Spring Bean 이란 IoC Container 내부에 들어있는 객체로 필요할 때 꺼내서 사용할 수 있다.
@Bean
이나 xml
설정을 통해 일반 객체를 Bean 으로 등록할 수 있다.
Spring Bean 생성 과정
Spring Bean 의 생명주기
- 객체 생성
- 의존 설정
- 초기화
- 사용
- 소멸
Bean 은 IoC Container 에 의해 생명주기를 관리하며 초기화 방법은 @PostConstruct
를 Bean 소멸에서는 @PreDestroy
를 사용한다.
생성한 Bean 을 등록할 때는 @ComponentScan
을 이용하거나 @Configuration
의 @Bean
을 사용하여 Bean 설정 파일에 직접 Bean 을 등록할 수 있다.
Bean 등록 방법
@Component
Bean 으로 등록하고자 하는 클래스 선언부 상단에 @Component
애너테이션을 추가하여 Bean 으로 등록할 수 있다.
자주 사용되는 @Controller
@Service
@Repository
애너테이션은 모두 @Component
애너테이션이 포함되어 있다.
스프링은 @ComponentScan
을 통해 @Component
애너테이션이 선언된 모든 클래스를 자동으로 스캔한 뒤 Singleton Bean 으로 등록한다.
@Bean
설정 클래스로 사용할 클래스를 생성하고 선언부 상단에 @Configuration
애너테이션을 추가하여 Bean 설정을 위한 클래스임을 명시한다.
Bean 으로 등록할 클래스를 반환하는 메서드를 만들고 해당 메서드 상단에 @Bean
애너테이션을 추가하여 Singleton Bean 을 등록할 수 있다.
이 때 생성되는 Bean 의 이름은 기본적으로 메서드명으로 지정되며, @Bean(name = "name")
을 통해 직접 이름을 지정해줄 수 도 있다.
Bean Scope
Bean Scope 는 Bean 이 존재할 수 있는 범위를 뜻하며 Singleton
Prototype
Request
Session
Application
등이 존재한다.
Singleton
Singleton 은 기본 Scope 로 IoC 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 Scope 다.
Prototype
Prototype 은 Bean 의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 Scope 다.
Request
Request 는 웹 요청이 들어오고 나갈때 까지 유지하는 Scope 다.
Session
Session 은 웹 세션 생성부터 종료까지 유지하는 Scope 다.
Application
Application 은 WebServletContext 와 같은 범위로 유지하는 Scope 다.