在spring中controller对象默认是单例的,那么在同一时间有两个请求到这个controller;请求中的数据肯定是不同的,一个对象怎么处理两个请求,两份不同的数据呢。
@RestController
public class TestController{
@RequestMappin("/test01")
public String test01(){
return "response";
}
}
例如上面的代码,两个人同时访问test01地址,它们携带的数据肯定不一样;单例的TestController怎么处理的请求呢。
Controller 执行方法,并没有操作全局变量。这个是线程安全的。
想想什么样的数据,才会有线程安全的问题,然后考虑下这里,是不是属于这些类型中的一类
1、spring单利的controller 类中,只能声明方法,不能声明属性;
2、spring多利的controller 类中,才可以声明属性;
spring中的controller 中每一个controller 方法,对应一个servlet实例,那么传入的参数数据均属于servlet线程安全。每一个请求就是servlet的一个线程实例。
类的方法是存放在方法区里的,而单例对象只是说堆里存放的类的属性值只有一份,当你用不同线程调用单例对象的方法时,两个线程会同时创建不同的方法栈,用于保存局部变量,所以,两者之间互不干涉
congtroller是单例的,但是请求过来是可以并发的,也就是说两个人同时访问,就是两个线程都拿到同一个Controller实例,并发处理各自的请求,没毛病 啊