我想了解春季Web範圍內的範圍。 我有我下面的配置文件中定義的bean稱爲球員:春季單身職業範圍不適用於網絡應用程序
<bean id="playerBean" class="com.anvesh.model.Player" scope="singleton"/>
然後我的servlet充當RequestController(從JSP中所有提交的請求將通過這個servlet路線)。在這個servlet,我初始化如下所述彈簧配置文件:
XmlWebApplicationContext ctx = new XmlWebApplicationContext();
ctx.setConfigLocation("/WEB-INF/WebAppContext.xml");
ctx.setServletContext(getServletContext());
ctx.refresh();
這個servlet處理兩種類型的請求 1)loginValidate 2)getFutureMatches
當「loginValidate」被調用我建立玩家豆和控制會去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");
在PlayerHomePage.jsp,我援引「getFutureMatches」行動。所以再次控制將來到RequestController,並在這裏,我試圖訪問像下面的球員豆
player = ctx.getBean("playerBean",Player.class);
但我越來越玩家爲空。
因爲我已經將playerBean定義爲singleton,所以一旦它被實例化,當它在其他地方被調用時應該返回相同的bean。這發生在我使用ApplicationContext時正確地發生,但是當我使用XmlWebApplicationContext時,單身bea不被維護。
---當我使用範圍作爲會話/應用程序,那麼即使在「getFutureMatches」操作中我的播放器bean也不是NULLIFIED。我能夠獲得在提前請求中初始化的Player對象。但我不明白爲什麼singletion不這樣做。請幫幫我。
請注意,我沒有使用spring-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>
如果你正在創建一個新的'Context',你將得到一個新的bean。只有使用相同的上下文時,纔會返回原始bean。 – Rohit