当前位置: 首页 > 知识库问答 >
问题:

将单例服务注入JAX-RS/Jersey资源的最佳方法是什么?

阎晋
2023-03-14

例如,如果几个资源endpoint需要访问某个消息总线来处理请求,该怎么办?当然,当服务类本身不是资源但被资源使用时,有一些方法可以注册一个单例服务类并将其注入到资源中。
我看到的提供程序或自定义HK2绑定的所有示例都引用了资源。

我发现的最接近我所要找的是这个问题:
使用内置的Jersey依赖注入在Jersey 2中创建一个简单的单例类会遇到麻烦

请注意,编程方式将是最有用的,我没有使用xml文件来配置服务器。

共有1个答案

蒋星雨
2023-03-14

如果您的平台支持EJB,那么您可以使用@singletonEJB(javax.EJB包,而不是javax.inject),并使用@EJB注释将其注入到您的资源中。单例EJB还具有outofthebox并发访问控制。

在plain Jersey上,可以使用CDI应用程序上下文。使用@applicationscoped注释声明服务类,并使用@inject将其注入资源。CDI将只实例化一个bean。

如果不能对服务类进行注释,则可以创建一个方法,为服务实现提供一个使用@production@applicationscoped进行注释的方法。

@Produces
@ApplicationScoped
public MyService produceService() {
    // instantiate your service client
}

然后在您的资源上使用它:

@Inject
private MyService
 类似资料:
  • 问题内容: 我正在通过DropWizard 0.7.1使用Jersey / JAX-RS公开RESTful服务端点。我所有的实体POJO都用JAX- RS和Hibernate / JSR-303 bean验证注释进行了注释,如下所示: 当资源方法接收到这些POJO之一作为输入时(实际上,DropWizard已经将HTTP实体JSON反序列化为一个实例),我想根据Hibernate / Bean V

  • 我正在通过DropWizard 0.7.1使用泽西/JAX-RS来公开RESTful服务endpoint。我已经用JAX-RS和HiberNate/JSR-303 bean验证注释注释了我所有的实体POJO,如下所示: 当资源方法接收到其中一个POJO作为输入时(在引擎盖下,DropWizard已经将HTTP实体JSON反序列化为

  • 我正在尝试构建一个RESTful web服务。该组件是对已包含多个servlet的现有Tomcat7Web应用程序的添加。我用的是泽西2.25。 我需要实例化一些与现有系统相关的组件(对象)。我希望在应用程序加载时这样做一次,然后从每个资源中读取它们。 和资源: 我不明白为什么我会得到这个例外: ServletException:一个MultiException有3个异常。他们是:1。org.gl

  • 问题内容: 我试图通过注释将无状态EJB注入到JAX-RS Web服务中。不幸的是,EJB是正义的,当我尝试使用它时我得到了。 我究竟做错了什么? 以下是有关我的机器的一些信息: Glassfish 3.1 Netbeans 6.9 RC 2 Java EE 6 你们能举个可行的例子吗? 问题答案: 我不确定这是否行得通。所以: 选项1:使用注入提供程序SPI 实现一个提供程序,它将执行查找并注入

  • 我们可以通过 实现创建JAX-RS示例。 为此,需要加载 jersey相关jar文件或使用Maven框架。 在这个例子中,我们使用jersey jar文件来实现JAX-RS jersey示例。 Jersey Jar文件下载网址:https://jersey.github.io/download.html 打开Eclipse,创建一个Web工程: restfuljersey,如下图所示 - JAX-

  • service.java: sqlDataProvider.java: 如果在Glassfish服务器中部署此servlet并执行请求,将引发以下异常: 亲切地问候帕斯卡