1. 웹스코프
- 웹 환경에서만 동작
- 프로토타입과 다르게 스코프의 종료시점까지 스프링이 관리한다. (종료메서드 호출 됨)
- request : HTTP요청 하나가 들어오고 나갈때까지 유지되는 스코프
: 각각의 요청마다 별도의 빈 인스턴스가 생성되고 관리된다.
- session : HTTP Session과 동일한 생명주기를 가지는 스코프
- application : 서블릿 컨텍스트와 동일한 생명주기를 가지는 스코프
- websocket : 웹소켓과 동일한 생명주기를 가지는 스코프
2. request 스코프의 예제
- Controller
- MyLogger에 저장하는 부분은 컨트롤러가 아닌 공통처리가 가능한 스프링 인터셉터, 서블릿 필터를 활용하는 것이 좋다.
- 웹과 관련된 정보는 서비스 계층에 넘어가면 안된다. 순수하게 유지하는게 좋다.
- 맨 처음에 에러난다.
- 스프링이 뜨는 시점에 Http 요청이 없으므로 라이프사이클 주기와 안맞는다
- Provider 써야겠지 ?
- 이러고 여러번 요청하게 되면
- MyLogger는 각각 다른 인스턴스로 생성, 앞의 uuid 또한 http 요청에 따라 다르게 잘 생성되었다.
- 요청이 섞이더라도 각각의 http 요청에 따라 uuid가 유지된다.
3. 스코프와 프록시
- Provider도 귀찮은 개발자들이 만든거
- 프록시방식
- 이렇게 쓰면 Provider 안써도 됨!
- 적용 대상이 인터페이스가 아닌 클래스면 TARGET_CLASS
- 인터페이스면 INTERFACES 선택
- Proxy가 알아서 가짜 프록시 객체를 만들어서 등록해준다.
- 이 Proxy객체 덕분에 싱글톤 빈을 사용하듯 편리하게 쓴다.
- 진짜 객체 조회를 꼭 필요한 시점까지 지연해서 처리하는 점이 핵심
SpringCore 핵심원리 기본 끝!
'Backend - Java Spring > Spring Core 핵심원리(완)' 카테고리의 다른 글
[SpringCore 핵심원리] Bean 스코프 (0) | 2024.02.18 |
---|---|
[SpringCore 핵심원리] 빈 생명주기 콜백 (0) | 2024.02.17 |
[SpringCore 핵심원리] List, Map (0) | 2024.02.17 |
[SpringCore 핵심원리] 애너테이션 (0) | 2024.02.17 |
[SpringCore 핵심원리] 생성자주입과 롬복 (0) | 2024.02.17 |
댓글