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

泽西和HK2服务定位器

荆弘伟
2023-03-14
public Application(@Context ServletContext context,
                   @Context ServiceLocator locator)...

当我尝试在任何一点使用定位器时,我仍然无法创建我使用locator.create(mything.class)方法在AbstractBinder中注册的东西的实例。

我确信它们是正确绑定的,因为它们通过@inject字段注释被正确地注入到我的资源类中。

不同的是,Jersey/HK2框架正在实例化我的资源类(正如预期的那样,因为它们在我的包扫描路径中),但我似乎无法通过代码来利用ServiceLocator。

locator.Create(AWorker.class) 

然后注射。

我如何获得真正的ServiceLocator,它将注入我已经注册/绑定到绑定器的所有内容?(或者我应该使用ServiceLocator以外的东西吗?)

共有1个答案

段志
2023-03-14

你的容器是怎么启动的?如果您使用的是ApplicationHandler,则只需调用:handler.getServiceLocator()。实际上,ServiceLocator是您希望用来访问依赖项的工具。

如果您正在启动一个servlet,我发现访问服务定位器的最佳方法是在我的启动类上设置一个Jersey特性:

    private static final class LocatorSetFeature implements Feature {

    private final ServiceLocator scopedLocator;

    @Inject
    private LocatorSetFeature(ServiceLocator scopedLocator) {
        this.scopedLocator = scopedLocator;
    }

    @Override
    public boolean configure(FeatureContext context) {
        locator = this.scopedLocator; // this would set our member locator variable
        return true;
    }
}

该特性将通过config.register(new LocatorSetFeature())在我们的资源配置中注册。

 类似资料:
  • 我试图在Jersey测试类中注入一个由HK2工厂服务提供的对象,但得到未满足的依赖项异常。 MultiException有3个异常。它们是: org.glassfish.hk2.api.unsatifiedDependencyException:在SystemInjecteeImpl(requiredtype=closeableService,parent=TestFactory,qualifie

  • 在我的应用程序中,我需要根据用户输入获得不同的实现。 到目前为止,我所做的只是通过在启动时使用和绑定到实现的接口注入服务: 然而,现在我需要根据用户输入动态获取一个实现。有25种不同的实现都使用相同的接口。 这意味着,我不能再简单地使用方法。相反,我认为我需要用单独注册它们。 我需要来自HK2的实例,因为Impl也使用注入的服务,所以我不能简单地创建一个新的实例。

  • 我正在编写一个公开 REST API 的简单微服务。所以我开始使用泽西岛,当然我需要将我的对象注入球衣资源中。基本上,我有2个类来定义一组资源,其中一些需要使用另一个服务。 所以基本上我有: } 该接口的2种实现(MyServiceBean和My备选ServiceBean) 而且,就我对阅读新泽西文件的理解,我定义了一个hk2活页夹: 我将此活页夹注册到ApplicationConfig类 } 并

  • 我是JavaWeb服务的新手,我正在努力解决一个基本问题。 在找到了一堆过时的示例后,我设法找到了一些使用XML的方法,但是当我要求它返回JSON时,相同的代码就不起作用了。 起初我认为它缺少JSON格式化程序,但JAXB应该负责从POJO到JSON的转换,所以我认为这不是问题所在。 Tomcat中引发的错误是: 网状物。XML Todo.java TodoResource。Java语言 你知道为

  • 我想创建一个类的单例实例,这个类不是作为资源或服务在Jersey中涉及的,但希望它的依赖项从Jersey ServiceLocator中注入。 我可以在ResourceConfig构造函数中手动注册该类,然后将ResourceConfig传入Grizzly工厂方法,如下所示:

  • 问题内容: 我一直坚持使用jersey库为RESTful Web服务创建gradle项目。项目配置应该能够在码头应用服务器内启动服务。我已经找到了资源:https : //github.com/ziroby/jetty-gradle-hello- world 该解决方案的我的问题是,它使用的是球衣的过时版本。我至少需要版本2(最好是最新的2.14)。我试图在Maven Central上搜索新版本,