问题
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中存在共享变量,那么这些变量就会产生线程不安全问题。
网友评论