2.11. Jakarta 上下文和依赖注入集成


RESTEasy 和 Jakarta Contexts 和 Dependency Injection 之间的集成由 resteasy-cdi 模块提供。

Jakarta RESTful Web 服务和 Jakarta 上下文和依赖注入规范都引入了自己的组件模型。置于 Jakarta 上下文和依赖注入存档中的每个类均满足一组基本限制,隐式为 Jakarta 上下文和依赖注入 Ban。为了使 Java 类成为 Jakarta RESTful Web 服务组件,需要使用 @Path 或 @Provider 明确声明您的 Java 类。如果没有集成代码,注解适合使用 Jakarta Contexts 和 Dependency Injection Bjection Bjection Bjection 的类会导致错误结果,并且 Jakarta RESTful Web Services 组件不由 Jakarta Contexts 和 Dependency Injection 管理。resteasy-cdi 模块是一个网桥,它允许 RESTEasy 处理从 Jakarta Contexts 和 Dependency Injection 容器获取的类实例。

在 Web 服务调用期间,resteasy-cdi 模块向 Jakarta Contexts 和 Dependency Injection 容器询问 Jakarta RESTful Web Services 组件的托管实例。然后,此实例将传递到 RESTEasy。如果受管实例因某种原因不可用,例如类放置在非 bean 部署存档的 JAR 文件中,RESTEasy 会返回实例化类本身。

因此,Jakarta 上下文和依赖注入服务(如注入、生命周期管理、事件、解码和拦截器绑定)可用于 Jakarta RESTful Web Services 组件。

2.11.1. 默认范围

默认情况下,未明确定义范围的 Jakarta Contexts 和 Dependency Injection bean。这种伪范围意味着 Bean 能够适应它所注入的 Bean 的生命周期。随着组件的生命周期界限明确指定,常规范围(包括请求、会话和应用程序)更适合 Jakarta RESTful Web 服务组件。因此,resteasy-cdi 模块会以以下方式更改默认范围范围:

  • 如果 Jakarta RESTful Web Services root 资源未显式定义范围,它将绑定到请求范围。
  • 如果 Jakarta RESTful Web 服务提供程序或 javax.ws.rs.Application 子类未显式定义范围,它将绑定到应用范围。
警告

由于所有未声明范围的 bean 都由 resteasy-cdi 模块修改,因此这也会影响到会话 Bean。因此,如果在规范禁止这些组件为 @RequestScoped 时自动更改无状态会话 Bean 或单例的范围,则会发生冲突。因此,在使用无状态会话 Bean 或单例时,您需要明确定义范围。以后的版本中可能会删除这个要求。

resteasy-cdi 模块与 JBoss EAP 捆绑在一起。因此,不需要单独下载模块或添加任何额外的配置。有关使用 Jakarta Contexts 和带有 Jakarta RESTful Web 服务资源的依赖注入 Bean 的工作示例,请参阅 JBoss EAP 附带的工具包。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat