SpringMVC前端控制器是单例?
是单例模式,每个只有一个实例存在。
怎么修改单例呢
- 注解方式
//@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)可成为多例模式,或者写成
@Scope("prototype")
- 配置文件形式
<bean id= "userInfo" class="com.jd.vo.UserInfo" lazy-init="true" scope="prototype">/bean>
为什么用单例模式
如果不是用单例,scope 使用的是request或者其他,就会创建大量的实例对象,在高并发环境下会严重降低系统性能,也没有必要。
怎么保证线程安全问题
因为Controller是无状态的,实例对象中没有保存数据信息,因此也就不存在线程安全问题。
有状态和无状态
对象中有可以保存数据,就是有状态对象,不能用来保存数据,就是无状态的。
无状态的一定是线程安全的,有状态的不一定会产生线程安全问题,如果是实例变量,或者不会修改的类变量,也是线程安全的。
注意:
尽量Controller、Service、Mapper都要设计成无状态的。