我正在尝试设置一个会话作用域bean,但是spring文档说会话作用域只适用于web感知的应用程序上下文。文档中没有进一步的解释。有人能澄清一下吗?
6yoyoihd1#
这意味着您只能在部署到Web服务器的应用程序中使用会话作用域bean。Spring可以用于在标准JVM中运行的应用程序沿着在servlet容器(Tomcat等)中运行的应用程序。然而,会话只存在于Web服务器中,因此如果应用程序在标准桌面环境中运行,则它没有任何意义。
olmpazwi2#
基本上有5种类型的作用域可用于springbean:1)单例2)原型3)请求4)会话5)全局会话前两个作用域可以用于任何类型的spring应用程序,但剩下的三个作用域与web应用程序有关,它们只能用于与web相关的spring应用程序。
s71maibg3#
Web感知表示应用程序为第三方客户端提供Web端点时。即应用程序至少包含一个RestController时。您可以通过向类添加@RestController注解来实现这一点。
@RestController
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 会自动为你配置这个(找不到明确提到这个的文档)。
4条答案
按热度按时间6yoyoihd1#
这意味着您只能在部署到Web服务器的应用程序中使用会话作用域bean。Spring可以用于在标准JVM中运行的应用程序沿着在servlet容器(Tomcat等)中运行的应用程序。然而,会话只存在于Web服务器中,因此如果应用程序在标准桌面环境中运行,则它没有任何意义。
olmpazwi2#
基本上有5种类型的作用域可用于springbean:1)单例2)原型3)请求4)会话5)全局会话
前两个作用域可以用于任何类型的spring应用程序,但剩下的三个作用域与web应用程序有关,它们只能用于与web相关的spring应用程序。
s71maibg3#
Web感知表示应用程序为第三方客户端提供Web端点时。即应用程序至少包含一个RestController时。您可以通过向类添加
@RestController
注解来实现这一点。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文件中:
Sping Boot 会自动为你配置这个(找不到明确提到这个的文档)。