开发中遇到一个问题:有个小伙伴在controller中定义了一个私有的全局变量:id,想在请求add方法时给id赋值,然后在请求update方法时拿过来用。因为我们开发的是B/S的项目,他竟然做到了,这让我感到很惊讶。之前从没遇到过这种问题啊。这样明显不对啊。在高并发的时候,这个id可以被N个人修改,然后最后被修改的值又被N个人拿过来使用。明显会有问题。
所以后来我怀疑跟controller的生命周期有关,也许这个controller被sprint托管后,就一直存在。
具体的原理是什么?麻烦热心人解答下,谢谢。
代码如下:
@RestController
@RequestMapping("/test")
public class TestController {
private Long id;
@PostMapping("/update")publicResponseModelupdate(){
System.out.println(this.id);
return null;
}@GetMapping("/add")publicResponseModeladd(Long id){
this.id = id;
System.out.println(this.id);
return null;
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/714/viewspace-3153144/ ,如需转载,请注明出处,否则将追究法律责任。