Spring 与 CDI 范围
Spring vs CDI scopes
Spring
和 CDI
的范围有哪些确切区别?例如:Singleton (Spring)
和 ApplicationScoped (CDI)
TL;DR它们是不同的,但你只提到了两个世界的一些范围。
Spring 支持以下范围:
- 单例
- 原型
- 应用程序(网络)
- 会话(网络)
- 请求(网络)
因此 Singleton 和 Prototype 范围存在于任何 Spring 应用程序(由 ApplicationContext
管理) ,即使是命令行实现。 Application、Session 和 Request 范围由 spring-web
依赖引入并由Spring.
中的 WebAppicationContext
Spring 通常为 Web 应用程序创建两个 DI 上下文的层次结构。根上下文绑定到主应用程序,只提供单例和原型。使用根上下文作为父级的 Web 上下文绑定到 servlet 上下文并提供所有范围。只有应用程序范围 bean 可作为属性从 servlet 上下文中获得(另请参阅 )。
Jakarta EE 提供以下 build-in scopes:
- 申请
- 会话
- 转化
- 请求
对于 Jakarta CDI,内置作用域的支持取决于容器管理。 Servlet 容器通常支持以上所有内容,其他容器可能仅支持 Application 范围,在这种情况下其行为类似于 Spring Singleton 范围。
范围 Application、Session 和 Request 在两个世界中都是相似的。 Spring 中没有开箱即用的 Conversation 作用域,但您可以在两个世界中实现自定义作用域,Conversation 可以类似于 Spring.
中的 Session 作用域来实现
Spring
和 CDI
的范围有哪些确切区别?例如:Singleton (Spring)
和 ApplicationScoped (CDI)
TL;DR它们是不同的,但你只提到了两个世界的一些范围。
Spring 支持以下范围:
- 单例
- 原型
- 应用程序(网络)
- 会话(网络)
- 请求(网络)
因此 Singleton 和 Prototype 范围存在于任何 Spring 应用程序(由 ApplicationContext
管理) ,即使是命令行实现。 Application、Session 和 Request 范围由 spring-web
依赖引入并由Spring.
WebAppicationContext
Spring 通常为 Web 应用程序创建两个 DI 上下文的层次结构。根上下文绑定到主应用程序,只提供单例和原型。使用根上下文作为父级的 Web 上下文绑定到 servlet 上下文并提供所有范围。只有应用程序范围 bean 可作为属性从 servlet 上下文中获得(另请参阅
Jakarta EE 提供以下 build-in scopes:
- 申请
- 会话
- 转化
- 请求
对于 Jakarta CDI,内置作用域的支持取决于容器管理。 Servlet 容器通常支持以上所有内容,其他容器可能仅支持 Application 范围,在这种情况下其行为类似于 Spring Singleton 范围。
范围 Application、Session 和 Request 在两个世界中都是相似的。 Spring 中没有开箱即用的 Conversation 作用域,但您可以在两个世界中实现自定义作用域,Conversation 可以类似于 Spring.
中的 Session 作用域来实现