2.11. Jakarta 上下文和依赖注入集成
RESTEasy 和 Jakarta Contexts 和 Dependency Injection 之间的集成由 resteasy-cdi 模块提供。
Jakarta RESTful Web 服务和 Jakarta 上下文和依赖注入规范都引入了自己的组件模型。置于 Jakarta 上下文和依赖注入存档中的每个类均满足一组基本限制,隐式为 Jakarta 上下文和依赖注入 Ban。为了使 Java 类成为 Jakarta RESTful Web 服务组件,需要使用 明确声明您的 Java 类。如果没有集成代码,注解适合使用 Jakarta Contexts 和 Dependency Injection Bjection Bjection Bjection 的类会导致错误结果,并且 Jakarta RESTful Web Services 组件不由 Jakarta Contexts 和 Dependency Injection 管理。@Path 或 @Providerresteasy-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 附带的工具包。