java—是否为SpringMVCRestAPI或SpringBootAPI对应用服务器的每个新请求创建了新的服务示例、存储库和组件?

lf3rwulv  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(256)

在开发spring boot rest api或spring mvc rest api时,我们用@controller、@service和@repository注解了类。这些都在tomcat应用服务器后面工作。
因此,当多个请求同时到达应用服务器时,是否为每个请求创建了控制器、服务和存储库的新示例?spring如何处理它?bean的连接是在运行时发生的吗?
dispatcherservlet是否创建新示例并在新线程中为每个请求进行连接?
我在哪里可以找到这些东西的技术细节和文档。
提前感谢您的投入

m2xkgtsf

m2xkgtsf1#

因此,当多个请求同时到达应用服务器时,是否为每个请求创建了控制器、服务和存储库的新示例?

答案是否定的。默认情况下,所有springbean都是用 @Controller , @Service , @Repository , @Component , @Bean 或者任何其他bean定义样式都是单例,spring在应用程序启动时只创建一个示例。
您可以在spring的文档中了解更多关于bean范围的信息。
每个请求都到达一个单独的线程中,因此在实现单例bean时,需要使它们成为线程安全的。

spring如何处理它?

spring通过实现这里描述的ioc容器来处理这个问题。

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

bean连接发生在应用程序上下文启动时,除非您使bean变懒。如果是这样,bean将在对bean的第一个请求时启动。

dispatcherservlet是否创建新示例并在新线程中为每个请求进行连接?

不,除非您将bean指定为非单例作用域。

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

spring对于核心模块和web模块都有不错的文档。你可以在这里找到它:
核心
网状物

相关问题