我是一名长期学习 NestJS 的 Spring 开发人员。相似之处是如此惊人,我很喜欢这让我变得如此富有成效。然而,一些文档让我对一件事感到困惑。
我尝试将 Nest“提供者”比作具有默认范围的 Spring bean。例如,我创建了@Injectable 服务类,并将它们视为类似于 Spring @Services。因此,我假设这些服务类需要是线程安全的 - 没有状态等。但是,这里的 Nest 文档对我来说有点模棱两可,并且暗示这可能没有必要(强调我的):
对于来自不同编程语言背景的人来说,在 Nest 中得知几乎所有内容都是在传入请求之间共享的,这可能是出乎意料的。我们有一个到数据库的连接池、具有全局状态的单例服务等。请记住,Node.js 不遵循请求/响应多线程无状态模型,其中每个请求都由单独的线程处理。因此,使用单例实例对我们的应用程序来说是完全安全的。
如果单个请求没有在它们自己的线程中处理,Nest 提供程序是否可以包含可变状态?由应用程序确保每个传入请求都以“干净的状态”开始 - 例如,使用 NestInterceptor 初始化该状态。但对我来说,该文档读取提供者是作为单例创建的,因此可以用作类似于数据包装容器的东西,例如 Java 中的 ThreadLocal。
我读错了吗,或者这是 Nest 和 Spring 之间的行为差异?