在Spring MVC中,控制器(@Controller)是单例的。

假设我对控制器中的服务类有依赖性,并且该服务类具有原型范围。
在这种情况下


对于同时到达控制器的两个不同的请求,我们是否将获得服务类的不同实例?
如果只有一次服务类实例可用于两个不同的请求,那么服务类功能内定义的局部变量是否会在两个请求内重叠?

最佳答案

否。为了构造一个控制器(将是一个单例),我们需要一个服务实例。每当我们要求该服务时,都会创建一个新对象。一旦建立了控制器(设置了所有依赖项),就不会再进行其他注入了。


考虑下面的示例。

controller1controller2都需要将服务作为依赖项。对于每个控制器,将创建一个新实例。但是对于不同的请求,它们不会更改。

    request1 --> controller1 --> service1
    request2 --> controller1 --> service1
    request3 --> controller1 --> service1

    request4 --> controller2 --> service2
    request5 --> controller2 --> service2
    request6 --> controller2 --> service2



我不确定我是否正确理解您。如果局部变量的名称与服务字段相同,则它将部分隐藏该服务。通过this.serviceVariable访问将解决此问题。

07-27 21:23