在开发spring boot rest api或spring mvc rest api时,我们用@controller、@service和@repository注解了类。这些都在tomcat应用服务器后面工作。
因此,当多个请求同时到达应用服务器时,是否为每个请求创建了控制器、服务和存储库的新示例?spring如何处理它?bean的连接是在运行时发生的吗?
dispatcherservlet是否创建新示例并在新线程中为每个请求进行连接?
我在哪里可以找到这些东西的技术细节和文档。
提前感谢您的投入
1条答案
按热度按时间m2xkgtsf1#
因此,当多个请求同时到达应用服务器时,是否为每个请求创建了控制器、服务和存储库的新示例?
答案是否定的。默认情况下,所有springbean都是用
@Controller
,@Service
,@Repository
,@Component
,@Bean
或者任何其他bean定义样式都是单例,spring在应用程序启动时只创建一个示例。您可以在spring的文档中了解更多关于bean范围的信息。
每个请求都到达一个单独的线程中,因此在实现单例bean时,需要使它们成为线程安全的。
spring如何处理它?
spring通过实现这里描述的ioc容器来处理这个问题。
bean的连接是在运行时发生的吗?
bean连接发生在应用程序上下文启动时,除非您使bean变懒。如果是这样,bean将在对bean的第一个请求时启动。
dispatcherservlet是否创建新示例并在新线程中为每个请求进行连接?
不,除非您将bean指定为非单例作用域。
我在哪里可以找到这些东西的技术细节和文档?
spring对于核心模块和web模块都有不错的文档。你可以在这里找到它:
核心
网状物