【发布时间】:2015-02-18 23:28:55
【问题描述】:
我了解在Spring框架中,bean的默认作用域是Singleton。这意味着每个容器只创建一个 bean 实例。
但我实际上无法理解以下场景。
例如类,假设类“SingleTonClass”在spring context.xml中配置为单例bean,
1)每次有这个类的请求,它是否使用相同的实例。如果是,那么如果我从另一个班级和new SingleTonClass().sum(5,6) 拨打类似new SingleTonClass().sum(3,4) 的电话,会给我正确的结果还是有时会出现问题?
2) 如果所有请求都使用同一个实例,那么在幕后怎么可能所有请求都使用一个实例?如果对同一个单例类有 100 个请求,每个请求都必须等到上一个请求完成?
编辑:
假设我使用的是 @Autowired 而不是 new 运算符
在我的主课中,我正在尝试使用使用 spring 配置的 bean。假设 MyMain 是否被多次调用(可能是并发调用,也可能不是并发调用),我想了解上面帖子中的第 2 点(编辑)
public class MyMain() {
@Autowired
SingleTonClass singleTonClass;
}
public class SingleTonClass {
private int a=0;
private int b=0;
public int sum(int a ,int b) {
return a+b;
}
}
【问题讨论】:
-
实际上,这个具体的例子看起来对于静态方法来说会更好,而不是单例类。但是,我很确定这是因为您从不使用构造函数,只使用像
SingletonClass.getInstance()这样的方法,它返回单例。 -
我想当你在框架中配置一个bean为单例时,你需要从Application上下文中获取实例,否则它只是另一个具有多个实例的类。
-
btw.- 这是单件,不是单件。单吨为 1000 公斤。
-
如果您使用
new,您将绕过 Spring,并且您获得的实例将是每次调用的新实例。但是,在您的特定示例中,该方法是无状态的,因此无论如何它对结果没有任何影响。