일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DDD
- nestjs공부
- JPA
- 프로그래머스
- 플러터 공부
- 스프링공부
- 스프링부트공부
- JPA공부
- K8S
- 스프링
- 기술공부
- nestjs스터디
- 알고리즘공부
- JPA 공부
- Kafka
- 코테준비
- JPA예제
- 기술면접공부
- 카프카
- Flutter
- nestjs
- JPA스터디
- Axon framework
- querydsl
- 플러터 개발
- 스프링부트
- 자바공부
- 스프링 공부
- 자료구조공부
- 코테공부
- Today
- Total
DevBoi
[Spring] static 과 스프링 빈의 차이 본문
정확히는 Spring 의 싱글톤 과 자바 static을 이용한 싱글톤 패턴의 차이라고 볼 수 있다.
여러 객체들이 하나의 인스턴스를 공유 한다는 개념은 같다.
하지만 해당 인스턴스의 생명주기에서는 큰 차이를 보인다.
1. 공유 기준
java static 의 공유 범위는 클래스 로더 기준
스프링 싱글톤의 공유 범위는 어플리케이션 컨텍스트 기준
클래스 로더기준이라고 하면, 톰캣 기준, webapp부분을 계층 적으로 관리한다.
만약에 webapp1, webapp2가 있다면, war파일 기준으로 다른 파일에 있는 클래스들끼리는 참조할 수 없다.
만약, 싱글 톤 기반으로 어플리케이션 컨텍스트 기준으로 공유하게 된다면
하나의 war파일 안에는 web.xml에 등록된 여러개의 servlet이 있을수있다.
Spring은 DispatcherServlet이라는 servlet을 사용한다.
DispatcherServlet은 각자 하나의 context를 갖게 되고, 여러개를 등록할 경우, 이 context도 여러개 생성이되고 해당
독립된 context끼리는 참조가 불가능해진다.
물론 root context 내에서는 공유가 가능하다
스프링의 싱글톤은 하나의 스프링 IOC 컨테이너안에서 하나만 생성되고 공유한다.
web.xml 기준으로 root context는 한개, servlet context는 여러개 생성가능하다
이 각각의 context가 스프링의 범위이다.
여러개의 서블릿,컨텍스트만 띄울일은 거의 없긴하지만, 가능은 하다
스프링의 싱글톤은 서로다른 servlet-context들끼리 참조가 불가능하다.
근데, static 기반 싱글톤을 참조가 가능하다.
정리하면
java 싱글톤은 클래스로더에 의해 구현, 스프링은 컨테이너에 의해 구현
자바 싱글톤의 스코프는 코드전체, 스프링 싱글톤의 스코프는 컨테이너 내부
스프링에 의해 구현된 싱글톤 패턴과 자바 싱글톤의 경우, 구현하는 개발자의 로직에 따라 보장 or not
'Develop > [Spring]' 카테고리의 다른 글
[Spring] ControllerAdvice (0) | 2022.05.02 |
---|---|
@SessionAttribute에 대해서 (0) | 2022.04.29 |
[Spring] ModelAttribute (0) | 2022.04.28 |
[Spring] 웹 통신 , 스프링 동작 과정 (0) | 2022.04.08 |
[Spring] WebClient (0) | 2022.03.30 |