1

我是 Spring mvc Web 开发的新手。我有一个查询。假设我们有不同的服务类别。因此,我们是否每个请求都有一个这些类的实例,或者只有该类的一个实例被创建。实际上我想使用实例变量,所以每个请求都会创建新实例,或者它会像单例类型的行为。希望我能够解释我的问题。

4

3 回答 3

1

你可以有,默认是一个单例 - 一个实例。但这可以使用 bean 范围进行更改。

官方文档正确章节的强制性链接

(个人从来不需要使用任何其他单例)

于 2014-02-04T18:55:10.390 回答
1

如果您没有明确定义任何范围,默认情况下它将是单例,单例意味着每个弹簧容器将有一个对象,对于您的上下文,一个对象用于所有请求线程。在单例范围的情况下,在使用成员变量时要小心,因为线程安全会涉及到。

如果您正在修改单例作用域 bean 中成员变量的状态,则需要编写线程安全代码,因为多个线程正在访问您的成员变量并且可能会发生竞争条件。

此外,您也可以在类级别(即@Component 上方)或@Bean 注释上方的方法级别使用@Scope 定义其他范围。

一般来说,我们继续使用默认范围(即单例范围),这样spring容器也不会浪费时间来创建请求的bean的新对象,尽管在每个请求线程上创建一个对象会有点开销。

如果您希望在每次 bean 注入时都有一个新对象,您可以拥有该 bean 的原型范围。

于 2022-02-08T04:33:46.337 回答
1

默认情况下使用单例,在单例中只为所有请求创建一个实例。

于 2022-02-08T04:36:14.680 回答