美文网首页spring
spring加上@service注解是单例会发生线程不安全问题吗

spring加上@service注解是单例会发生线程不安全问题吗

作者: King斌 | 来源:发表于2022-07-29 13:46 被阅读0次

    问题

    spring框架在service层加上@service注解是单例模式, 两个线程同时调用单例模式service, 线程1的service的test方法返回1; 线程2的service的test方法返回2; 返回到controller的时候会不会拿到的都是2 ; 不会搞混吗?

    解释

    1.首先要了解Spring Bean的作用域:

    spring默认是单例的,但是跟@service注解没有关系。单例还是多例跟@Bean注解有关系,通过scope属性进行设置,scope取值有
    scope="singleton",单例(默认);
    scope="prototype",任何一个实例都是新的实例;
    scope="request",在WEB应用程序中,每一个实例的作用域都为request范围;
    scope="session",在WEB应用程序中,每一个实例的作用域都为session范围;
    scope="global Session",在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。

    2.你说的会不会搞混的问题是不存在的,即使调用同一个类同一个方法,方法里的局部变量都是线程私用的,大家互不影响。spring默认都是单例bean所以是都会被多个线程访问同一个Bean所以是线程不安全的。如果bean中存在共享变量,那么这些变量就会产生线程不安全问题。

    相关文章

      网友评论

        本文标题:spring加上@service注解是单例会发生线程不安全问题吗

        本文链接:https://www.haomeiwen.com/subject/rdcqwrtx.html