Singleton Spring控制器中的依赖项范围

时间:2018-07-08 17:27:02

标签: java multithreading spring-mvc javabeans

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

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

  1. 对于同时向控制器发送的两个不同请求,我们是否将获得服务类的不同实例?

  2. 如果只有一个服务类实例可用于两个不同的请求,那么服务类功能内定义的局部变量是否会在两个请求内重叠?

1 个答案:

答案 0 :(得分:2)

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

请考虑以下示例。

controller1controller2都需要将服务作为依赖项。对于每个控制器,将创建一个新实例。但不会因其他请求而更改。

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

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