簡體   English   中英

Spring 是什么意思 3、web-aware application context

[英]What does it mean in Spring 3, web-aware application context

我正在嘗試設置一個 session 作用域 bean,但 spring 文檔說 session scope 僅適用於網絡感知應用程序上下文。 文檔中沒有進一步的解釋。 有人可以澄清一下嗎?

這意味着您只能在部署到 Web 服務器的應用程序中使用會話范圍的 bean。 Spring 可用於在標准 JVM 中運行的應用程序以及在 servlet 容器(Tomcat 等)中運行的應用程序。 但是,會話僅存在於 Web 服務器中,因此如果應用程序在標准桌面環境中運行,則它沒有任何意義。

Spring bean 基本上有 5 種類型的作用域。 1)Singleton 2)Prototype 3)Request 4)Session 5)Global-Session

前兩個范圍可用於任何類型的彈簧應用程序。 但其余 3 個與 Web 應用程序相關。 它們只能與 web 中涉及的 spring 應用程序一起使用。

Web 感知意味着應用程序為第三方客戶端提供 Web 端點。 IE 當應用程序包含至少一個RestController 時 您可以通過簡單地將@RestController注釋添加到您的類中來做到這一點。

ApplicationContext 是一個接口,spring 提供了多個 ApplicationContext 實現,根據您需要使用的文檔,您需要使用一個具有 web 感知能力的實現。

請求、session、應用程序和 websocket 范圍僅在您使用 Web 感知 Spring ApplicationContext 實現(例如 XmlWebApplicationContext)時可用。 如果您將這些作用域與常規 Spring IoC 容器(例如 ClassPathXmlApplicationContext)一起使用,則會拋出 IllegalStateException,抱怨未知的 bean scope。

從 spring 框架核心 (6.0.4) 開始,可能需要進一步配置

為了在請求、session、應用程序和 websocket 級別(Web 范圍的 beans)支持 beans 的范圍,在定義 beans 之前需要一些小的初始配置。

...

如果您在 Spring Web MVC 中訪問作用域 bean,實際上,在由 Spring DispatcherServlet 處理的請求中,不需要特殊設置。 DispatcherServlet 已經公開了所有相關的 state。

如果您使用 Servlet web 容器,請求在 Spring 的 DispatcherServlet 之外處理(例如,當使用 JSF 時),您需要注冊 org.springframework.web.context.request.RequestContextListener ServletRequestListener。 這可以通過使用 WebApplicationInitializer 接口以編程方式完成。 或者,將以下聲明添加到您的 web 應用程序的 web.xml 文件中:

<web-app>
    ...
    <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>
    ...
</web-app>

Spring boot 會自動為你配置這個(找不到明確提到這個的文檔)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM