java 它在Spring3的Web感知应用程序上下文中意味着什么

7y4bm7vi  于 2023-01-16  发布在  Java
关注(0)|答案(4)|浏览(108)

我正在尝试设置一个会话作用域bean,但是spring文档说会话作用域只适用于web感知的应用程序上下文。文档中没有进一步的解释。有人能澄清一下吗?

6yoyoihd

6yoyoihd1#

这意味着您只能在部署到Web服务器的应用程序中使用会话作用域bean。Spring可以用于在标准JVM中运行的应用程序沿着在servlet容器(Tomcat等)中运行的应用程序。然而,会话只存在于Web服务器中,因此如果应用程序在标准桌面环境中运行,则它没有任何意义。

olmpazwi

olmpazwi2#

基本上有5种类型的作用域可用于springbean:1)单例2)原型3)请求4)会话5)全局会话
前两个作用域可以用于任何类型的spring应用程序,但剩下的三个作用域与web应用程序有关,它们只能用于与web相关的spring应用程序。

s71maibg

s71maibg3#

Web感知表示应用程序为第三方客户端提供Web端点时。即应用程序至少包含一个RestController时。您可以通过向类添加@RestController注解来实现这一点。

laik7k3q

laik7k3q4#

ApplicationContext是一个接口,spring提供了多个ApplicationContext实现,根据文档,您需要使用一个Web感知的实现。
请求、会话、应用程序和WebSocket作用域只有在使用Web感知Spring ApplicationContext实现(如XmlWebApplicationContext)时才可用。如果将这些作用域与常规Spring IoC容器(如ClassPathXmlApplicationContext)一起使用,则会抛出一个IllegalStateException,抱怨未知的bean作用域。
对于Spring框架核心(6.0.4),可能需要进一步配置:
要支持请求、会话、应用程序和WebSocket级别的bean作用域(web作用域bean),在定义bean之前需要进行一些小的初始配置。
...
如果您在Spring Web MVC中访问作用域bean,实际上,在Spring DispatcherServlet处理的请求中,不需要特殊的设置。
如果使用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>

Sping Boot 会自动为你配置这个(找不到明确提到这个的文档)。

相关问题