Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 그리디 알고리즘
- 무디스
- object
- 프로그래머스
- 주린이
- 금리인하
- 다형성
- etf
- 접근제어자
- StringBuffer
- XLF
- 알고리즘
- 오버라이딩
- 금리인상
- 백준
- 자바
- 현금흐름표
- 미국주식
- 인플레이션
- 제태크
- 잉여현금흐름
- 배당성장
- FCF
- mco
- 주식
- 기업분석
- S&P500
- Java
- javascript
- 객체지향
Archives
- Today
- Total
오늘의하루
Spring Bean Scope 본문
Bean Scope
Bean이 존재할 수 있는 범위를 뜻한다.
Singleton
Bean의 기본 스코프이며 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프이다.
Prototype
스프링 컨태이너는 Prototype Bean의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않고 반환하는 가장 짧은 범위의 스코프이다.
- 초기화 콜백까지는 불러주지만 소멸전 콜백은 해주지 않는다.
- 종료 메서드의 경우 직접 호출해야한다.
만약 Singleton내부에서 Prototype을 사용하려면?
이 질문의 의도는 여러명의 클라이언트가 요청을 보낼때 마다 Prototype을 새롭게 만들어서 주입이 가능하냐는 말이다.
만약 기존에 의존관계를 주입하듯이 하면 처음 주입 받은 Prototype이 Singleton내부의 값이 되므로 새롭게 만들어지지 않는다.
@Scope("singleton") // 생략 가능
public class TestBean{
private final PrototypeBean prototypeBean;
@Autowired // 생략 가능
public TestBean(PrototypeBean prototypeBean){
this.prototypeBean = prototypeBean;
}
public int logic(){
prototypeBean.addCount();
return prototypeBean.getCount();
// 이 경우 여러명의 클라이언트가 요청시 새롭게 prototypeBean이 생성되지 않는다.
}
//---------------------------------------------------------------------------
private final ObjectProvider<PrototypeBean> prototypeBeanProvider;
// ObjectProvider<T>은 지정된 타입을 스프링 빈에서 조회해 오는것이다.
// 이때 Prototype은 스프링 컨테이너에서 생성, 주입, 초기화콜백을 하고 Client에게 반환된다.
@Autowried
public TestBean(ObjectProvider<PrototypeBean> prototypeBeanProvider){
this.prototypeBeanProvider = prototypeBeanProvider;
}
public int logic2(){
prototypeBean prototypeBean = prototypeBeanProvider.getObject();
// 이 것을 통해서 매번 새롭게 조회해와서 사용할 수 있다.
prototypeBean.addCount();
return prototypeBean.getCount();
}
}
@Scope("prototype")
public class PrototypeBean{
private int count = 0;
public void addCount(){
count++;
}
public void getCount(){
return count;
}
@PostConstruct
public void init(){
System.out.println("PrototypeBean.init");
}
}
'Spring' 카테고리의 다른 글
Web Server, WAS, Servlet 정리 (0) | 2023.08.22 |
---|---|
Spring Web관련 Scope (0) | 2023.08.22 |
Spring Bean 생명 주기 콜백 (0) | 2023.08.21 |
Spring 의존 관계 주입 정리 (0) | 2023.08.21 |
Spring ComponentScan 관련 정리 (0) | 2023.08.20 |
Comments