웹 컨텍스트에서 봄의 범위를 이해하려고합니다. 나는 다음과 같이 구성 파일에 정의 된 콩라는 선수가 있습니다스프링 싱글 톤 범위가 웹 응용 프로그램에서 작동하지 않습니다.
<bean id="playerBean" class="com.anvesh.model.Player" scope="singleton"/>
가 그럼 난 RequestController 역할을 서블릿이 (JSP를의 모든 제출 요청을 것이 서블릿을 통해 경로).
이 서블릿 요청 1의 두 가지 유형을 처리
XmlWebApplicationContext ctx = new XmlWebApplicationContext();
ctx.setConfigLocation("/WEB-INF/WebAppContext.xml");
ctx.setServletContext(getServletContext());
ctx.refresh();
) loginValidate은 "loginValidate는"내가 만드는 오전 호출 2) getFutureMatches
:이 서블릿에서 나는 다음과 같이 스프링 구성 파일을 초기화하고 (아래처럼) 플레이어 빈과 PlayerHomePage.jsp을 갈 것를 제어합니다 PlayerHomePage.jsp에서
player = ctx.getBean("playerBean",Player.class);
player.setName("Anveshan");
player.setExp(10);
player.setId(3175);
player.setQualification("B.Tech");
System.out.println("In the validate Login :"+player);
response.sendRedirect("/SpringRefernce_Scope/Jsp/PlayerHomePage.jsp");
, 나는 "getFutureMatches"조치를 호출. 그래서 다시 컨트롤이 RequestController에 올 것입니다. 여기서는 플레이어 빈을 아래처럼 접근하려고합니다.
player = ctx.getBean("playerBean",Player.class);
그러나 플레이어가 null이됩니다.
playerBean을 싱글 톤으로 정의 했으므로 일단 인스턴스화되면 다른 곳에서 호출 될 때마다 동일한 bean을 반환해야합니다. 이것은 XmlWebApplicationContext를 사용할 때 ApplicationContext.but을 사용할 때 올바르게 발생합니다. 단 하나의 비아는 유지되지 않습니다.
--- 범위를 세션/응용 프로그램으로 사용할 때 "getFutureMatches"동작에서도 내 플레이어 bean이 NULLIFIED되지 않습니다. 나는 이전 요청에서 초기화 된 Player 객체를 얻을 수 있습니다. 그러나 나는 왜 싱글렛이 그렇게하지 않는지 이해할 수 없다. 도와주세요.
스프링 - mvc를 사용하고 있지 않음에 유의하십시오. 내 web.xml의 항목은 다음과 같습니다 :
나는 포스트 방법으로 설정 파일 코드의 초기화를 유지했기 때문에<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<servlet>
<servlet-name>requestController</servlet-name>
<servlet-class>com.anvesh.servlet.RequestController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>requestController</servlet-name>
<url-pattern>/RequestController</url-pattern>
</servlet-mapping>
새로운 '컨텍스트'를 생성하는 경우 새 빈을 얻게됩니다. 원래의 bean은 동일한 컨텍스트가 사용되는 경우에만 리턴됩니다. – Rohit