Spring
스프링의 빈 스코프
monkeyDugi
2022. 1. 14. 08:34
반응형
빈 스코프란?
보통은 싱글톤 빈을 사용하게 된다. 싱글톤 빈은 스프링 컨테이너의 시작 → 종료까지 유지되는 스코프를 가졌다.
스코프라는 것은 빈이 살아있는 범위를 의미한다.
빈 스코프의 종류
싱글톤
→ 기본 스코프, 스프링 컨테이너 시작 → 끝프로토타입
→ 의존 관계 주입까지 살아있음.매번 새로운 객체를 생성한다.
→ 싱글톤 빈은 스프링 컨테이너 생성 시점에 초기화 메서드가 실행되지만
프로토타입은 빈 조회(ac.getBean)할 때 초기화 메서드가 실행이 된다.
즉, ac.getBean()을 할 때 의존관계 주입이 일어난다.
→ 스프링 컨테이너가 종료될 때 종료 메서드가 호출되지 않는다.
호출하려면, 조회한 빈에서 직접 호출해주어야 한다.- 웹 스코프
request
: 웹 요청이 들어오고 나갈 때 까지- session : 웹 세션이 생성되고 종료될 때 까지
- applicaiont : 웹의 서블릿 컨텍스트와 같은 범위 ???????
프로토 타입
프로토 타입의 범위를 확인 해보자.
class PrototypeTest {
@Test
void prototypeBeanFind() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class);
PrototypeBean prototypeBean1 = ac.getBean(PrototypeBean.class); // 이 시점에 초기화 메서드 호출
PrototypeBean prototypeBean2 = ac.getBean(PrototypeBean.class); // 이 시점에 초기화 메서드 호출
assertThat(prototypeBean1).isNotSameAs(prototypeBean2);
ac.close(); // 종료 메서드 호출되지 않음.
// 이렇게 직접 종료 해주어야 함. 즉, 스프링 컨테이너의 영역을 벗어난 것.
prototypeBean1.close();
prototypeBean2.close();
}
@Scope("prototype")
static class PrototypeBean {
@PostConstruct
public void init() {
System.out.println("SingletonBean.init");
}
@PreDestroy
public void close() {
System.out.println("SingletonBean.close");
}
}
}
반응형