오늘 나는 범위의 범위를 연구했습니다. 기본값은 싱글 톤 모드 (예 : Scope =”Singleton”입니다. 또한 SCOPE에는 프로토 타입, 요청, 세션 및 글로벌 세션 범위도 있습니다. SCOPE = "프로토 타입"다중 예제. Bean의 범위를 구성 할 때 헤더 파일 양식은 다음과 같습니다.
Spring의 범위 사용 방법 :
<bean id = "역할"scope = "싱글 톤"/>
여기의 범위는 Springbean의 범위를 구성하는 데 사용되며 Bean의 범위를 식별합니다.
봄 2.0 이전에 콩은 싱글 톤 (싱글 톤), 비 싱턴 (프로토 타입이라고도 함)의 두 가지 범위를 가졌습니다. 봄 2.0 이후, 웹 응용 프로그램 컨텍스트를 위해 특별히 설계된 3 개의 콩이 추가되었습니다. 따라서 스프링 2.0에는 이제 기본적으로 5 가지 유형의 콩이 있습니다. 물론 Spring 2.0은 Bean 유형의 설계와 유연한 Bean 유형 지지대의 디자인을 리팩토링했습니다. 이론적으로는 수많은 유형의 콩이있을 수 있습니다. 사용자는 실제 애플리케이션 요구에 따라 새로운 콩 유형을 추가 할 수 있습니다.
1. 싱글 톤 범위
콩의 범위가 싱글 톤으로 설정되면 Springioc 컨테이너에는 공유 Bean 인스턴스가 하나만 있으며 ID가 Bean 정의와 일치하는 한 Bean에 대한 모든 요청은 콩의 동일한 인스턴스 만 반환됩니다. 다시 말해, Bean 정의를 Singleton Scope에 설정할 때 Springioc 컨테이너는 해당 Bean 정의의 고유 인스턴스 만 생성합니다. 이 단일 인스턴스는 싱글 톤 캐시에 저장되며 Bean에 대한 모든 후속 요청 및 참조는 캐시 된 객체 인스턴스를 반환합니다. 여기서 GOF 디자인 패턴의 싱글 톤 범위와 싱글 톤은 완전히 다르다는 점에 유의해야합니다. 싱글 톤 디자인 패턴은 클래스 로더에 하나의 클래스 만 존재한다는 것을 의미하며, 여기서 싱글 톤은 컨테이너가 콩에 해당 함을 의미합니다. 즉, 콩이 싱글 톤으로 식별되면 스프링 IOC 컨테이너에는 하나의 콩 만 존재합니다.
구성 인스턴스 :
<bean id = "역할"scope = "Singleton"/> 또는 <bean id = "role"singleton = "true"/>
2. 프로토 타입
모든 요청 (다른 Bean에 주입하거나 컨테이너의 getBean () 메소드를 프로그램 형태로 호출)는 새로운 Bean 인스턴스를 생성합니다. 이는 새로운 작업과 동일합니다. 프로토 타입 범위가있는 콩의 경우, 하나는 매우 중요합니다. 즉, 스프링은 프로토 타입의 전체 수명주기를 담당 할 수 없습니다. 컨테이너가 프로토 타입 인스턴스를 초기화, 구성, 장식 또는 조립 한 후에는 클라이언트에게 전달한 다음 프로토 타입 인스턴스를 무시합니다. 범위에 관계없이 컨테이너는 모든 객체의 초기화 된 수명주기 콜백 메소드를 호출하며 프로토 타입의 경우 구성된 파괴 된 수명주기 콜백 방법이 호출되지 않습니다. 프로토 타입 스코어링 된 객체를 지우고 프로토 타입이 보유한 값 비싼 리소스를 자유롭게하는 것은 클라이언트 코드의 책임입니다. (싱글 톤 스코핑 된 콩이 차지하는 스프링 컨테이너가없는 자원을 갖는 한 가지 가능한 방법은 콩의 후 프로세서를 사용하는 것입니다.
구성 인스턴스 :
<bean id = "역할"scope = "프로토 타입"/> 또는 <beanid = "역할"싱글 톤 = "false"/>
3. 요청
요청은 각 HTTP 요청에 대해 새 콩이 생성 될 것임을 나타냅니다. 동시에, 콩은 현재 httprequest에서만 유효합니다. 구성 인스턴스는 다음과 같습니다.
요청, 세션 및 글로벌 세션을 사용하는 경우 먼저 초기화 된 web.xml에서 다음 구성을해야합니다.
Servlet 2.4 이상이있는 웹 컨테이너를 사용하는 경우 웹 애플리케이션의 XML 선언 파일 Web.xml에 다음 컨텍스트 리스트너를 추가하면됩니다.
<web-app> ... <layer> <layer-class> org.springframework.web.context.request.requestcontextlistener </hareser-class> </laiseer> ... </web-app>
Servlet 2.4 이전의 웹 컨테이너 인 경우 javax.servlet.filter 구현을 사용해야합니다.
<web-app> .. <filter> <filter-name> requestContextFilter </filter-name> <filter-class> org.springframework.web.filter.requestContextFilter </filter-class> </filter> <filter-mapping> <filter-name> requestContextFilter </irlter-name> </필터 매핑> ... </web-app>
그런 다음 Bean의 범위를 구성 할 수 있습니다.
<bean id = "역할"scope = "request"/>
4. 세션
세션 범위는 각 HTTP 요청에 대해 새 콩이 생성 될 것임을 나타냅니다. 동시에, 콩은 현재 httpsession 내에서만 유효합니다. 구성 인스턴스는 다음과 같습니다.
구성 인스턴스 :
요청 인스턴스 구성을위한 전제 조건과 마찬가지로 웹 시작 파일을 구성한 후 다음과 같이 구성 할 수 있습니다.
<bean id = "역할"scope = "세션"/>
5. 글로벌 세션
Globalsession 범위는 표준 HTTPSESSION 범위와 유사하지만 Portlet 기반 웹 응용 프로그램에서만 의미가 있습니다. Portlet Specification은 포틀릿 웹 응용 프로그램을 구성하는 모든 다른 포틀릿이 공유하는 글로벌 세션의 개념을 정의합니다. GlobalSession 범위에 정의 된 Bean은 글로벌 포스트 릿션의 수명 주기로 제한됩니다. 글로벌 세션 범위를 사용하여 웹에서 콩을 식별하는 경우 웹은 자동으로 세션 유형으로 사용됩니다.
구성 인스턴스 :
요청 인스턴스 구성을위한 전제 조건과 마찬가지로 웹 시작 파일을 구성한 후 다음과 같이 구성 할 수 있습니다.
<bean id = "역할"scope = "글로벌 세션"/>
요약
위의 내용은 봄의 범위 범위에 대한이 기사의 간단한 토론에 관한 것이며, 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!