在Spring MVC中,控制器(@Controller)是单例的。
假设我对控制器中的服务类有依赖性,并且该服务类具有原型范围。
在这种情况下
对于同时到达控制器的两个不同的请求,我们是否将获得服务类的不同实例?
如果只有一次服务类实例可用于两个不同的请求,那么服务类功能内定义的局部变量是否会在两个请求内重叠?
最佳答案
否。为了构造一个控制器(将是一个单例),我们需要一个服务实例。每当我们要求该服务时,都会创建一个新对象。一旦建立了控制器(设置了所有依赖项),就不会再进行其他注入了。
考虑下面的示例。controller1
和controller2
都需要将服务作为依赖项。对于每个控制器,将创建一个新实例。但是对于不同的请求,它们不会更改。
request1 --> controller1 --> service1
request2 --> controller1 --> service1
request3 --> controller1 --> service1
request4 --> controller2 --> service2
request5 --> controller2 --> service2
request6 --> controller2 --> service2
我不确定我是否正确理解您。如果局部变量的名称与服务字段相同,则它将部分隐藏该服务。通过
this.serviceVariable
访问将解决此问题。