Spring容器中的bean的作用域有5个范围: (1)singleton:默认的作用域,每个容器中只有一个bean的实例; (2)prototype:为每一个bean请求提供一个实例; (3)request:为每一个网络请求创建一个实例,请求完成后回收; (4)session:确保每个session中有一个bean的实例,在session过期后,bean消失; (5)global-session
假设有一个Service类
@Service public class MyServiceImpl implements MyService{ public void doService(){ } }一个Controller类:
@Controller public class MyController{ @Resource private MySerivce mySerivce; private void doRequest(){ mySerivce.doService(); } }(1)如果bean的作用域配置的是prototype,则每次注入都会创建一个新的bean对象,这样显然是线程安全的;
(2)如果bean的作用域配置的是singleton,则对于多次注入,都会是对同一个bean对象进行操作,绝对是线程不安全的;
对于Tomcat而言,会有专门的线程去监听某个端口上有没有请求过来,对于不同的请求,Tomcat会分发给不同的线程去进行处理,当多个线程并发去对一个bean进行操作时,显然是线程不安全的。