首页新闻找找看学习计划

关于Spring 的controller 单例多例问题

0
[待解决问题]

通过各种查询得值Spring controller默认下是单例,也就是说这个类的对象在容器中只有一个,那么如果里面有私有变量可能会随不同的人访问出现值得改变,导致错误。所以尽可能不要或者禁止在controller中定义变量,以上我的理解没错吧?那么还有一个问题困扰我,就是在controller中注入的service对象,他又是多例还是单例呢,我的理解是注入过程根据注解,在项目启动结束,Spring已经为controller创建好了service,所以我认为是单例。不知道对不对。如果是单例那么,在多用户使用时,是不是需要加锁呢,不然是不是也导致线程不安全呢?希望真正懂得为我解答一下。在下十分感激。

0o飞行天下o0的主页 0o飞行天下o0 | 初学一级 | 园豆:124
提问于:2017-06-23 11:22
< >
分享
所有回答(2)
0

spring mvc没用过,但就spring而言,bean是在初始化完成后就已经加载完毕(lazy load除外),是否单例取决于配置。

单例中对象是最好不要包含状态信息,比如对象的会被使用的字段。

在一般场景下,普通的锁是无法解决并发的问题,如果需要锁需要换用分布式锁。

Daniel Cai | 园豆:10374 (专家六级) | 2017-06-23 13:55
0

刚被坑了一次。controller里面注入的service也是默认单例,所以不要在service里面声明变量,这种变量是线程不安全的。

随风若絮 | 园豆:202 (菜鸟二级) | 2019-07-15 15:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册