[Spring] Bean
정리
Bean
- Spring Framework에서 관리하는 오브젝트, 즉 하나의 독립적인 단위로서의 객체
Bean의 생명주기
- 인터페이스 구현
- InitaializingBean은 초기화를, DisposableBean은 소멸을 담당하는 인터페이스
public interface InitializingBean{
void afterPropertiesSet() throws Exception;
}
public interface DisposableBean{
void destroy() throws Exception;
}
public class SimpleClass implements InitializingBean, DisposableBean{
@Override
public void afterPropertiesSet() throws Exception{
// Bean 생성 및 초기화를 담당한다.
}
@Override
public void destroy() throws Exception{
// Bean 소멸을 담당한다.
}
}
- 메서드 지정
- XML설정 파일에서 bean을 정의할 때 생성 및 소멸을 소유권을 통해 지정할 수도 있다.
<bean id="simpleBean" class="com.spring.bean.BSimpleClass" init-method="init" destroy-method="destroy" />
@Bean(initMethod = "init", destroyMethod = "destroy")
public ConnPool3 connPool3(){
return new ConnPool3();
}
- 어노테이션의 사용
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class SimpleClass{
@PostConstruct
public void init(){
// Bean 생성 및 초기화
}
@PreDestroy
public void destroy(){
// Bean 소멸
}
}
Bean Scope
Scope | 정의 |
---|---|
singleton | 스프링 IoC 컨테이너 당 하나의 객체 인스턴스에 하나의 빈을 정의한 스코프 |
prototype | 필요한 매 순간 새로운 bean 객체가 생성 |
request | 한 HTTP 요청의 생명주기에 하나의 빈을 정의한 스코프 |
session | 한 HTTP 세션의 생명주기에 하나의 빈을 정의한 스코프 |
global session | 한 글로벌 HTTP 세션의 생명주기에 하나의 빈을 정의한 스코프 |
- socope가 prototype의 경우 destroy 이벤트 처리가 불가능
java singleton 패턴과 spring singleton 차이
- java singleton
- 특정 클래스에 대해서 ClassLoader 마다 유일한 인스턴스가 생성
- spring singleton
- 스프링 컨테이너는 빈 정의의 클래스에 대한 유일한 인스턴스를 생성
- bean id에 대해서 유일한 인스턴스 보장 - 같은 클래스라도 id가 다르면 새로 생성
- 스프링 컨테이너는 빈 정의의 클래스에 대한 유일한 인스턴스를 생성