当提到SpringBean是线程安全的吗?其实意思是bean里面定义的变量是线程安全的,单独的一个bean是没有什么安全不安全的概念的。
其实可以回答是安全,也可以回答是不安全的。下面来看一下Spring注解属性:Scope
@Scope("prototype")
表示每次获得bean的时候都会创建一个新的对象
@Scope("singleton")
表示Spring容器里面的bean,通过Spring容器去获取的时候每次总是同一个实例。
那这就很明显了,用@Scope("prototype")标志的是线程安全的。@Scope("singleton")则是线程不安全的,每次获取的都是同一个实例,里面的变量是共享的。
Scope属性值还可以是request、session、globalSession,但用的不多。
request表示在一次http请求内有效(只适用于web应用)
session表示在一个用户会话内有效(只适用于web应用)
globalSession表示在全局会话内有效(只适用于web应用)