是否为 spring mvc Rest api 或 spring boot api 向应用程序服务器的每个新请求创建新的 Service、Repository 和 Component 实例?

Sag*_*gii 7 java rest spring spring-mvc spring-boot

在开发 spring-boot REST API 或 spring-mvc REST API 时,我们有使用 @Controller、@Service 和 @Repository 注解的类。这些都在 tomcat 应用服务器后面工作。

那么,当多个请求同时到达应用程序服务器时,是否会为每个请求创建一个新的控制器、服务和存储库实例?spring 是如何处理的呢?bean 的连接是否在运行时发生?

DispatcherServlet 是否创建新实例并为新线程中的每个请求进行连接?

我在哪里可以找到这些东西的技术细节和文档。

预先感谢您的投入

geo*_*eze 11

那么,当多个请求同时到达应用程序服务器时,是否会为每个请求创建一个新的控制器、服务和存储库实例?

答案是不。默认情况下,所有使用 、 、 、 或任何其他 bean 定义样式定义的 Spring bean@Controller都是@Service急切@Repository@Component@Bean,并且 spring 在应用程序启动时仅创建一个实例。

您可以在 Spring 文档中了解有关 bean 作用域的更多信息。

每个请求都到达一个单独的线程,因此在实现单例 bean 时需要使它们成为线程安全的。

spring 是如何处理的呢?

Spring 通过实现此处描述的 IoC 容器来处理此问题。

bean 的连接是否在运行时发生?

Bean 连接发生在应用程序上下文启动时,除非您使 Bean 变得惰性,如果是这样,Bean 将在第一次请求 Bean 时启动。

DispatcherServlet 是否创建新实例并为新线程中的每个请求进行连接?

不可以,除非您将 Bean 指定为非单例作用域。

我在哪里可以找到这些东西的技术细节和文档?

Spring 对于核心模块和 Web 模块都有不错的文档。你可以在这里找到它:

  • 是的,如果您不使用“@Scope”注释(或任何其他方式)重新定义 bean 范围,那么您的 bean 将在所有线程之间共享。 (2认同)