弹簧请求范围

Lis*_*isa 1 java spring spring-mvc spring-boot

请看下面的例子。我想知道如果我在下面指定范围是否会有任何区别。谢谢

@RestController
@RequestScope
@RequestMapping("/api/v1/user")
public class UserResource {

  @GetMapping("/addresscheck")
  public String getAddress() {
    return customer.getAddress();
  }
}


// Here does it matter I define the scope or not? is it still going to be treated as one per request?
@RestController  
@RequestMapping("/api/v1/user")
public class UserResource {

  @GetMapping("/addresscheck")
  public String getAddress() {
    return customer.getAddress();
  }
}

Run Code Online (Sandbox Code Playgroud)

Mee*_* K. 6

默认情况下,所有 Spring 管理的 bean 都有singleton作用域。因此,在您的第二个实现中,UserResourceSpring 只会创建一个对象,并且每次满足对指定 URL 的请求时都会提供该对象。

然而,在第一次执行,因为你注释UserResource@RequestScope春季将创建一个新的控制器对象来充当每个请求。这意味着您可能维护的任何状态信息UserResource都将丢失。的所有成员变量UserResource也将为每个请求重新创建。

尽管我很好奇您为什么希望控制器具有请求范围?如果可能,您能否分享您的用例?

这是一篇关于这个主题的好文章:Spring Bean Scopes