본문 바로가기

SpringFramework Core - I. IoC 컨테이너/5. Bean Scopes

(14)
5.4.1. 웹 초기 설정 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-other-web-configuration 요청, 세션, 애플리케이션, 웹소켓 레벨의 scope를 제공하고 싶다면, bean을 정의하기 전에 약간의 minor한 초기 설정들이 필요하다(이러한 초기 설정은 싱글턴이나 프로토타입 scope에서는 필요없다). 이 초기 설정을 어떻게 하느냐는 어떤 서블릿 환경이냐에 따라 다르다. 스프링 웹 MVC의 DispatcherServlet을 통해 처리되는 요청에서는, 위 scope를 가진 bean들에 접근할 때 사실상 특별한 설정이 필요없다. DispatcherServ..
5.4. 요청, 세션, 애플리케이션 그리고 웹소켓 Scopes 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-other 요청, 세션, 애플리케이션 그리고 웹소켓 scope들은 웹 환경의 스프링 ApplicationContext 구현체를 사용할 때만 사용할 수 있다. 만약 ClassPathXmlApplicationContext와 같은 일반적인 스프링 IoC 컨테이너에서 이 scope들을 쓴다면, bean scope를 모른다는 내용의 IllegalStateException이 발생한다.
5.3. 싱글턴 bean과 프로토타입 bean 사이의 의존성 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-sing-prot-interaction 싱글턴 bean을 프로토타입 bean의 의존성과 함께 사용할때는, 의존성이 인스턴스화될 때 생긴다는 것을 주의하라. 그래서 프로토타입 bean을 싱글턴 bean 안으로 주입하면 새로운 프로토타입 bean이 인스턴스화되어 싱글턴 bean 안으로 들어간다. 싱글턴 bean을 프로토타입 bean의 의존성과 함께 사용할때는 의존성이 인스턴스 시점에 생긴다는 것을 주의하라. 그래서 프로토타입 bean을 싱글턴 bean 안으로 주입하면 새로운 프로토타입 bean이 인스턴스화..
5.2. 프로토타입 Scope 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-prototype 싱글턴이 아닌 프로토타입 scope는 해당 bean에 대한 요청이 있을 때마다 새로운 bean의 인스턴스를 생성하도록 한다. 즉, bean이 다른 bean으로 주입되거나 컨테이너에 getBean() 메소드를 호출함으로써 bean을 요청하게 된다. 규칙상, 모든 stateful한 bean들에는 프로토타입 scope를 써야하고, stateless한 bean들에는 싱글턴 bean을 써야한다. 다음 다이어그램은 스프링 프로토타입 scope를 보여준다. (데이터 접근 객체(DAO)는 프로토타입..
5.1. 싱글턴 Scope 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-singleton 단 하나의 공유된 싱글턴 bean 인스턴스만이 관리된다. 그리고 ID를 통해 bean을 요청하면, 스프링 컨테이너에 의해 하나의 특정한 bean 인스턴스가 반환된다. 다르게 말하면, 싱글턴으로 scope를 잡은 bean을 정의했다면 스프링 IoC 컨테이너는 정확하게 하나의 인스턴스만 만들어낸다. 이 single 인스턴스는 싱글턴 bean들의 캐시에 저장되고, 그 후에 해당 bean에 대한 모든 요청과 참조에 대해서는 캐시된 객체가 반환된다. 다음 그림은 싱글턴 scope가 어떻게 작동..
5. Bean Scopes 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes bean을 정의하는 것은, 실제 인스턴스가 생성될 때 필요한 레시피를 만드는 것이다. bean 정의가 레시피라는 발상은 중요하다. 왜냐하면 하나의 레시피를 통해 많은 객체 인스턴스를 만들어낸다는 뜻이 되기 때문이다. bean 정의를 통해, 생성된 객체에 다양한 의존성이나 설정값들을 채워넣을 뿐만 아니라 객체의 scope도 제어하게 된다. 이러한 접근은 강력하고 유연하다. 자바 클래스 레벨에서 scope를 설정하는 대신에 설정을 통해 scope를 선택할 수 있기 때문이다. bean들은 다양한 scope ..