Spring Beans的并发访问安全性

时间:2016-09-19 15:50:50

标签: java spring

我有目前的方法:

private int getStatusCode(String path) throws IOException {
  HttpClient client = HttpClients.createDefault();
  HttpGet method = new HttpGet(path);
  HttpResponse httpResponse = client.execute(method);
  return httpResponse.getStatusLine().getStatusCode();        
}

我想把它放在Spring @Service课程中。然后我想将该类用作@Autowired。我知道Spring bean是单例,因此我的自动化类只有一个实例。我有不同的@Controller类使用该服务。并发访问是否会导致我的问题?例如,覆盖另一个请求的路径?

1 个答案:

答案 0 :(得分:0)

  

并发访问是否会导致我的问题?

虽然它是单例,但并不会导致任何并发问题,因为方法getStatusCode仅使用

  • 作为参数传递给方法的对象(例如:String path)
  • 在方法中创建的对象。
  

例如,覆盖另一个请求的路径?

不是问题,因为每个方法调用都来自不同的线程,并且方法的参数(如路径变量)存储在堆栈中,这对于每个线程都是不同的。

作为一个实时示例,我们看一下Servlet。无论请求数量多少,servlet容器都只创建一个servlet实例。所有请求线程都通过将自己的(doGet(...) or doPost(...))HttpServletRequest对象传递给上述方法来访问此单个servlet实例的HttpServletResponse方法,并且它不会导致混淆请求/回复。