豆子的春季会话范围究竟如何工作?Bean 在 Web 上下文中的默认作用域是什么?

2022-09-01 20:23:30

我正在学习春季MVC,我有以下疑问:

  1. 会话范围的确切用途是什么?

阅读文档,我知道这将bean定义范围限定为HTTP会话。仅在 Web 感知的 Spring ApplicationContext 的上下文中有效。此外,每个用户会话还会创建一次新实例。

但是它究竟是在什么时候使用的呢?目的何在?你能举一个实际的例子吗?

  1. 在Spring MVC中,Web上下文中的默认范围是什么?

我知道在春季,豆子的默认范围是单例,但是在Web上下文中豆子的作用域呢?


答案 1

Ans 1) 会话作用域与 Http 会话作用域非常相似。基于会话作用域实例化的 Bean 通过 HTTP 会话存活。与请求范围类似,它仅适用于 Web 感知的 Spring 应用程序上下文。

/** * Annotation-based configuration of session scope */ 
@Component
@Scope("session") 
public class ShopCart { }

然后

@Inject
private ShopCart cart;

Ans 2)默认是单例无处不在。


答案 2
  1. 您将 spring 会话 Bean 用于有状态的 Bean,并且其状态因用户而异。例如,这些可以是当前登录用户的首选项。
  2. Bean 在 spring 中的默认范围是单例,在 Web 应用程序上下文中也没有什么不同。

请注意,在 Web 环境中,您还可以使用 REQUEST 作用域的 Bean,并且它们的生存期仅针对一个用户请求。当会话不是必需且请求已足够时,应使用请求作用域。

另外,在 Portlet 环境中,您可以使用另一个作用域,即全局会话。每个 Portlet 都有自己的独立会话,通常这些 Portlet 被假定为仅为自己封装了自己的状态。但是,如果需要在不同的 Portlet 之间共享会话数据,则需要使用全局会话作用域。


推荐