Spring/[inflearn]스프링 핵심 원리 - 기본편(35)
-
빈 스코프 - 웹 스코프 사용 시 문제해결
-> 이전에 request 스코프 코드를 만들고 실행했을 때 HTTP 요청이 들어오지 않아서 request 스코프 빈이 생성되지 않아 에러가 발생했다. Provider, 프록시를 사용하여 에러를 해결한다. ◎ Provider 사용 LogDemoController import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annota..
2023.09.19 -
빈 스코프 - 웹 스코프
◎ 웹 스코프 -> 웹 환경에서만 동작한다. -> 웹 스코프는 스프링이 해당 스코프의 종료시점까지 관리하며 종료 메서드가 호출된다. ◎ 웹 스코프 종류 -> request : HTTP 요청이 들어오고 나갈 때 까지 유지되는 스코프로 각각의 HTTP 요청마다 별도의 빈 인스턴스를 생성한다. - 클라이언트 A와 B가 동시에 HTTP request를 요청한다면 위 그림과 같이 별도의 빈 인스턴스가 생성되고 관리된다. -> session : HTTP session과 동일한 생명주기를 가지는 스코프 -> application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 가지는 스코프 -> websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프 ◎ request 스코프 만들기 -> ..
2023.09.18 -
빈 스코프 - 프로토타입 스코프와 싱글톤 빈과 함께 사용 시 Provider로 문제 해결
-> 싱글톤 빈과 프로토타입 빈을 함께 사용하면 프로토타입 빈이 싱글톤 빈과 함께 유지되어 프로토타입 빈의 목적과는 다른 결과가 나온다. 이번에는 싱글톤 빈과 프로토타입 빈을 함께 사용하면서도 항상 새로운 프로토타입 빈을 생성하는 방법에 대해 알아본다. ◎ 컨테이너에 요청 -> 싱글톤 빈이 프로토타입 빈을 사용할 때마다 스프링 컨테이너에 새로 요청하는 방법이다. 가장 간단한 방법이다. public class SingletonWithPrototypeTest1 { @Test void singletonClientUsePrototype(){ // 싱글톤 빈에서 프로토타입 빈 사용 테스트 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicatio..
2023.09.18 -
빈 스코프 - 프로토타입 스코프와 싱글톤 빈과 함께 사용 시 문제점
-> 스프링 컨테이너에 프로토타입 스코프의 빈을 요청하면 매번 새로운 객체 인스턴스를 반환한다. 이런 프로토타입 빈을 싱글톤 빈과 같이 사용하는 경우 의도대로 동작하지 않을 수 있다. -> 아래는 스프링 컨테이너에 프로토타입 빈을 직접 요청하는 예제다. 1. 클라이언트A는 스프링 컨테이너에 프로토타입 빈을 요청한다. 2. 스프링 컨테이너는 프로토타입 빈(PrototypeBean@x01)을 새로 생성해서 반환한다. 이 프로토타입 빈의 count 필드 값은 0이다. 3. 클라이언트는 조회한 프로토타입 빈에 addCount()를 호출하여 count필드를 +1한다. - 프로토타입 빈(PrototypeBean@x01)의 count는 1이 된다. 1. 클라이언트B는 스프링 컨테이너에 프로토타입 빈을 요청한다. 2...
2023.08.27 -
빈 스코프 - 프로토타입 스코프
◎ 프로토타입 스코프 -> 프로토타입 스코프는 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다. 1. 프로토타입 스코프의 빈을 스프링 컨테이너에 요청한다. 2. 스프링 컨테이너는 이 때 프로토타입 빈을 생성하고 의존관계를 주입한다. 3. 스프링 컨테이너는 생성한 프로토타입 빈을 클라이언트에게 반환한다. 4. 모두 반환하면 스프링 컨테이너는 프로토타입 빈을 더 이상 관리하지 않고, 이후 스프링 컨테이너에 같은 요청이 오면 프로토타입 빈을 새로 생성하여 반환한다. ※ 중요 포인트 - 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계를 주입하고 초기화까지만 처리한다. - 클라이언트에 반환한 후에는 더 이상 프로토타입 빈을 관리하지 않는다. - 프로토타입 빈을 관리할 책..
2023.08.26 -
빈 스코프
◎ 빈 스코프 -> 스프링 빈은 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지되는데 이것은 스프링 빈이 싱글톤 스코프로 생성되었기 떄문에 스프링 컨테이너의 시작과 끝까지 유지되었던 것이다. -> 스프링은 싱글톤 스코프 외에도 다양한 스코프를 지원한다. ◎ 싱글톤 -> 기본 스코프로 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프다. ◎ 프로토타입 -> 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더 관여하지 않는 매우 짧은 범위의 스코프 ◎ 웹 관련 스코프 -> request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 -> session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 -> application : ..
2023.08.26