** 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