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

如何在泽西2.12获得HK2 ServiceLocator?

暨修洁
2023-03-14

我想创建一个类的单例实例,这个类不是作为资源或服务在Jersey中涉及的,但希望它的依赖项从Jersey ServiceLocator中注入。

我可以在ResourceConfig构造函数中手动注册该类,然后将ResourceConfig传入Grizzly工厂方法,如下所示:

ResourceConfig resourceConfig = new DeviceServiceApplication();

LOGGER.info("Starting grizzly2...");
return GrizzlyHttpServerFactory.createHttpServer(BASE_URI,
                                                 resourceConfig, mServiceLocator);

共有1个答案

左华灿
2023-03-14

我可以通过注册ContainerLifeCyclelistener来获得对ServiceLocator的引用。

OnStartup(Container Container)方法中,调用Container.GetApplicationHandler().GetServiceLocator()

此示例将引用存储resourceConfig的成员变量,您可以通过访问器在其他地方使用该变量。

class MyResourceConfig extends ResourceConfig
{
    // won't be initialized until onStartup()
    ServiceLocator serviceLocator;

    public MyResourceConfig()
    {
        register(new ContainerLifecycleListener()
        {
            public void onStartup(Container container)
            {
                // access the ServiceLocator here
                serviceLocator = container.getApplicationHandler().getServiceLocator();

                // ... do what you need with ServiceLocator ...
                MyService service = serviceLocator.createAndInitialize(MyService.class);
            }

            public void onReload(Container container) {/*...*/}
            public void onShutdown(Container container) {/*...*/}
        });
    }

    public ServiceLocator getServiceLocator()
    {
        return serviceLocator;
    }
}

然后在其他地方:

MyService service
    = myResourceConfig.getServiceLocator().createAndInitialize(MyService.class);
 类似资料:
  • 我试图通过POST检索数字数组,发送到服务器的原始数据是: 这包含一个来自javascript控制台的数组桶=[6,6,6,...]: 我使用以下代码发布: 我的服务器代码是: 服务器输出为: 为什么它不获取数组值? 编辑:在创建这个线程之前,我试着使用@FormParam,但仍然不起作用

  • 我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?

  • 我知道,如果我不穿运动衫,这是一件很容易的事,我会用这样的东西: 我也意识到我可以做到这一点,并完成它。 但是,如果我真的想转储通过POST提交的表单的所有内容,该怎么办? 问题是,我使用Jersey作为JAX-RS的实现,并使用上面的代码输出以下内容: 我猜想我的数据包含在这里:不过我不确定jaxrsquestattributes。 我知道我错过了一些东西。这应该不难吧? 更新 正如索蒂里奥斯所

  • 我不想让泽西做任何依赖注射。我认为有从Jersey到Guice的桥梁,但是基于我不能在这里显示的程序需求,我需要自己创建REST控制器实例,并向Guice请求它们。 我的问题:我怎样才能禁用泽西岛的依赖注入? 我当前正在使用注释。也许我可以改用注释,以为Jersey不会在寻找这些注释。但我还是宁愿把泽西岛的依赖注射关了。我怎么能那样做?

  • 我正在迁移一个遗留服务框架,该框架使用java序列化/反射来注册服务,并将它们作为远程endpoint(javabin over http)或本地调用无缝地调用。我已经将远程调用替换为jerseyendpoint。并使用基于hk2 aop的拦截器重新构建了现有框架的部分拦截能力。当远程客户端调用endpoint时,它工作正常。现在,我需要对服务方法的本地调用执行相同的操作,并且能够使用与远程服务方