在开发spring-bootREST API或spring-mvc REST API时,我们有用@Controller、@Service和@Repository注释的类。这些都在tomcat应用程序服务器后面工作。
那么,当多个请求同时到达应用服务器时,是否为每个请求创建了控制器、服务和存储库的新实例?spring是如何处理的?bean的连接是在运行时进行的吗?
DispatcherServlet是否创建新实例,并在新线程中为每个请求进行布线?
我在哪里可以找到这些东西的技术细节和文档。
提前感谢您的意见
答案是否定的。默认情况下,所有用@Controller
、@Service
、@Repository
、@Component
、@Bean
或任何其他Bean定义样式定义的Spring Bean都是渴望的单例,Spring在应用程序启动时只创建一个实例。
您可以在Spring的留档中了解有关bean范围的更多信息。
每个请求都会在一个单独的线程中到达,所以在实现单例bean时,需要使它们具有线程安全性。
Spring通过实现IoC容器来处理这一问题,本文对此进行了描述。
bean连接发生在应用程序上下文启动时,除非您使bean变懒。如果是这样,bean将在对bean的第一个请求时启动。
不,除非您将bean指定为非单例作用域。
Spring为核心模块和Web模块提供了不错的文档。你可以在这里找到它:
这是一个简单的场景: 用户从Web应用程序的网页触发一些操作。这个操作很重,需要更多的时间。 在操作在服务器端完成之前,用户触发器会用一些不同的参数表示相同的操作。因此,第二个请求的第二个操作也将开始处理。 在这种情况下,是否有两个不同的线程,比如第一个线程处理第一个请求,另一个线程处理第二个请求?或者它只是一个线程处理两个请求,第一个操作只是为了执行第二个请求而被中断(未完成)? 在这里,我不想
我尝试分析一个gRPC java服务器。我主要看到下面的一组线程池。 null
和类似的服务: 我用的是12个实体,大家的服务方式都一样。 谢谢!
问题内容: 我有一堂课 不确定规范对HTTPServlet的回收有何评论:servlet容器是否应该在每个传入请求上创建此类的新实例,或者实现可以在请求之间重用类? 我正在调查一个有趣的问题,其中似乎是在GAE_SERVLETREQUESTServlet实例上创建的Map保持了请求之间的状态。 问题答案: 对于一般情况-非分布式,多线程的,可以保证只有servlet的一个实例。根据Servlet
我有一个非常简单的Vert。公开pingendpoint的x应用程序: 正如预期的那样,默认情况下为Vert。x创建了两个我可以通过VisualVM看到的事件循环线程: 当然,这个应用程序什么都不做,所以我知道你可以去给PingVerticle添加一个http服务器 现在,我在VisualVM中看到有两个新线程,一个接受线程,我可以或多或少理解,另一个事件循环线程: 为什么要创建第三个eventl
单击通知、服务创建新活动和活动创建新服务? 我的应用MainActivity“OnCreate”创建一个“粘性”的服务。 在我的服务中,当有一些通知时,我会发布多个通知。除非用户进入应用程序并阅读通知,否则通知将在那里。在onStartCommand中检查新通知。 按下通知将发送打开MainActivity的意图。 有服务、主要活动和通知。 一段时间后,MainActivity被系统杀死。 单击通