본문 바로가기

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

(14)
5.5.2. 커스텀 Scope 사용하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-custom-using 하나 이상의 커스텀 Scope 구현체를 생성하고 테스트하고나면 스프링 컨테이너가 이 새로운 scope를 알아보도록 해야한다. 다음 메소드는 스프링 컨테이너에 새로운 Scope를 등록하기 위한 주요 메소드이다. void registerScope(String scopeName, Scope scope); 이 메소드는 ConfigurableBeanFactory 인터페이스에 선언되어 있으며, BeanFactory의 프로퍼티를 통해 사용가능하다. 따라서 BeanFactory의 구현체이면서 ..
5.5.1. 커스텀 Scope 만들기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-custom-creating 커스텀 scope를 스프링 컨테이너로 통합하기 위해서는 이제부터 설명할 org.springframework.beans.factory.config.Scope 인터페이스를 구현해야한다. 자신만의 scope를 어떻게 구현할지에 대해서는, 스프링 프레임워크가 제공하는 Scope 구현체들과 Scope javadoc을 참고하라. 구현해야할 메소드들에 대해서 구체적으로 설명해줄 것이다. Scope 인터페이스는 scope에서 객체를 얻기위한 4가지 메소드를 가지고 있다. scope에서 그..
5.5. 커스텀 Scopes 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-custom bean의 scoping 메커니즘은 확장가능성이 있다. 나만의 scope를 만들수도 있으며 이미 존재하는 scope를 재정의할 수도 있다. 하지만 재정의는 그리 좋지 않으며, built-in된 싱글턴과 프로토타입 scope는 오버라이드 할 수 없다.
5.4.6. 생성을 위한 프록시 종류 고르기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-other-injection-proxies 요소로 bean을 위한 프록시를 만들 때, 스프링 컨테이너는 기본적으로 CGLIB 기반 클래스의 프록시를 만든다. ※ CGLIB 프록시는 오직 public 메소드 호출만을 가로챈다! 이 프록시에 public하지 않은 메소드는 호출하지 말자. 그런 메소드들은 실제 대상 객체로부터 위임받은 적이 없기 때문이다. 대안으로, 요소의 'proxy-target-class' 속성을 false로 설정함으로써, 표준 JDK 인터페이스 기반의 프록시를 스프링 컨테이너가 만들도록..
5.4.5. 의존성으로서의 Scoped Beans 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-other-injection 스프링 IoC 컨테이너는 객체의 인스턴스화 뿐만 아니라 협력자들을 엮어주는 일도 한다. 예를 들어, 만약 HTTP 요청 scope의 bean을 더 긴 scope를 가진 다른 bean에 주입하는 경우라면, scoped bean에(HTTP 요청 scope) AOP 프록시를 주입해야할 지 모른다. 즉, scoped 객체(HTTP 요청 scope)와 똑같은 public 인터페이스를 표현하는 프록시 객체를 주입해야한다는 것이다. 하지만 이는 실제 대상 객체를 관련 scope(HTTP..
5.4.4. 애플리케이션 Scope 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-application 다음 bean 정의에 대한 XML 설정을 보자. 스프링 컨테이너는 전체 웹 애플리케이션을 위해 한번만 AppPreferences bean의 새로운 인스턴스를 만들어낸다. 즉, appPreferences bean은 ServletContext 레벨의 scope이며, 일반적인 ServletContext의 속성으로서 저장된 것이다. 이는 스프링의 싱글턴 bean과 어느정도 비슷하다. 하지만 중요한 두 가지가 다르다. 하나는 스프링 'ApplicationContext'(여러 웹 애플리케이션..
5.4.3. 세션 Scope 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-session 다음 bean 정의에 대한 XML 설정을 보자. 스프링 컨테이너는 단일한 HTTP 세션의 라이프타임을 위한 새로운 UserPreferences bean 인스턴스를 만들어낸다. 즉, userPreferences bean은 HTTP 세션 레벨에 효과적이다. 요청 bean처럼, 생성된 bean의 내부 상태에 대해서는 바꾸고 싶은 만큼 바꿀 수 있다. 왜냐하면 같은 userPreferences bean의 정의를 이용해 생성된 다른 인스턴스들은 자신의 상태에서는 이 변화를 알아채지 못하기 때문이다..
5.4.2. 요청 scope 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-request bean 정의에 대한 다음 XML 설정을 보자. 스프링 컨테이너는 각각의 HTTP 요청에 대해 LoginAction bean의 새로운 인스턴스를 만들어낸다. 즉, loginAction bean은 HTTP 요청 레벨로 scope가 설정된 것이다. 생성된 bean의 내부 상태에 대해서는 바꾸고 싶은 만큼 바꿀 수 있다. 왜냐하면 같은 loginAction bean의 정의를 이용해 생성된 다른 인스턴스들은 자신의 상태에서는 이 변화를 알아채지 못하기 때문이다. 그들은 개별 요청에 따라 구분된다..