Spring中的Bean是线程安全的吗?

    技术2022-07-10  158

    一、Bean的作用域

    Spring容器中的bean的作用域有5个范围: (1)singleton:默认的作用域,每个容器中只有一个bean的实例; (2)prototype:为每一个bean请求提供一个实例; (3)request:为每一个网络请求创建一个实例,请求完成后回收; (4)session:确保每个session中有一个bean的实例,在session过期后,bean消失; (5)global-session

    二、Spring中的Bean是否线程安全

    假设有一个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进行操作时,显然是线程不安全的。

    Processed: 0.010, SQL: 9