spring controller单例,service单例,单例模式,如何合理使用实例成员(全局)变量,类变量

** spring 框架下 ,无论是controller还是service还是dao层,程序都是单例的,什么叫做单例?就是同一个service类,spring容器都只产生一个service类,多少个用户同时访问都是访问同一个controller,service类**

既然是单例,为啥用户拿到的数据不会混乱?

因为用户调用的都是类里面的方法,方法里面的都是局部变量,没有对象单例一说法,且方法里面的变量都是new 新一个对象了,所以不会线程不安全。

对象实例化?

就是写好一个类定义为人类,类有跑的动作,有姓名,然后new就是创建一个具体的人

@Autowired 依赖注入,就是不用自己绑定创建对象,spring自己帮我们注入他们的对象

https://blog.csdn.net/coding_1994/article/details/80634810

controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。

正因为单例所以不是线程安全的,因为如果定义全局变量(实例变量,成员变量),因为单例也就是无论多少个用户访问controller或者service,他们拿到都是同一个controller和service类,即使他们访问的方法不一样,但是如果他们的函数拿到的变量是成员变量那会是同一个,如果用户A拿到成员变量初始化为0变成了1.那用户B再使用时候是1而不是0了。下次就变成3了。就会导致数据混乱。

如何解决?

1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式。
3、在Controller中使用ThreadLocal变量

参考链接 https://blog.csdn.net/riemann_/article/details/97698560

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值