泽西正常使用HK2依赖注入,但我想用匕首2的泽西。Dagger和HK2都实现了JSR330,我认为这是不需要太多努力就可以实现的。我找到了让Jersey与CDI(例如Weld)、Spring DI和Guice一起工作的方法,但在Dagger上我找不到任何东西。
为了提供一些上下文:我正在SE环境中运行Grizzly-Jersey服务器,而不是在EE容器中。我的Maven项目有com.google.dagger:dagger
和org.glassfish.jersey.containser-grizzly2-http
作为依赖项,但没有org.glassfish.jersey.inject:jersey-HK2
,因为我想用dagger替换HK2。
资源类如下所示:
@Path("/example")
public final class ExampleResource {
private final Dependency dependency;
@Inject
public ExampleResource(final Dependency dependency) {
this.dependency = Objects.requireNonNull(dependency);
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Example getExample() {
return this.dependency.giveExample();
}
}
匕首部件例如可以定义如下:
@Component
public interface Application {
public ExampleResource exampleEndpoint();
public XyzResource xyzEndpoint();
// etc.
}
public final class Main {
public static void main(final String[] args) {
final Application application = DaggerApplication.create();
final URI baseUri = UriBuilder.fromUri("http://0.0.0.0/").port(80).build();
final ResourceConfig resourceConfig = new ResourceConfig();
// how to initialize `resourceConfig` using `application`?
final HttpServer httpServer = GrizzlyHttpServerFactory
.createHttpServer(baseUri, resourceConfig, false);
try {
httpServer.start();
} catch (final IOException ex) {
...
}
}
}
运行应用程序会立即导致一个异常:IllegalStateException:InjectionManagerFactory not found。
似乎需要这个工厂的Dagger实现。
我的问题是:如何将匕首与泽西融为一体?
您需要实现一个InjectionManagerFactory
,它将返回委托给Dagger的InjectionManager
并将其注册为服务,方法是在Meta-INF/Services
中放入一个条目,类似于这里的hk2条目:https://github.com/jersey/jersey/blob/master/inject/hk2/src/main/resources/meta-inf/services/org.glassfish.jersey.internal.inject.InjectionManagerFactory,但引用了您自己的实现。
这是我为我的HTTPServer编写的内容: 任何帮助都将不胜感激。
我正在编写一个公开 REST API 的简单微服务。所以我开始使用泽西岛,当然我需要将我的对象注入球衣资源中。基本上,我有2个类来定义一组资源,其中一些需要使用另一个服务。 所以基本上我有: } 该接口的2种实现(MyServiceBean和My备选ServiceBean) 而且,就我对阅读新泽西文件的理解,我定义了一个hk2活页夹: 我将此活页夹注册到ApplicationConfig类 } 并
我有一个资源类 我尝试了泽西岛2.0的依赖注入中的答案 如果我使用 启动服务器时,我得到 如果我删除了上述依赖项,那么我得到 资源配置类是 活页夹类是 我在嵌入式模式下使用tomcat并添加init参数 我如何在控制器中注入服务?注入是单元测试的首选方式吗(当服务实现调用另一个服务时,比如说XService ),单元测试不应该依赖于Xservice,因此demoServiceImpl如何从测试中将
我不想让泽西做任何依赖注射。我认为有从Jersey到Guice的桥梁,但是基于我不能在这里显示的程序需求,我需要自己创建REST控制器实例,并向Guice请求它们。 我的问题:我怎样才能禁用泽西岛的依赖注入? 我当前正在使用注释。也许我可以改用注释,以为Jersey不会在寻找这些注释。但我还是宁愿把泽西岛的依赖注射关了。我怎么能那样做?
在我的应用程序中,我试图创建组件 null 我已经创建了组件,并从应用程序类启动。 ContextModule类如下所示 上下文组件将是 错误:
我使用带有spring boot的jersey,我有一个异常映射器: 同样注册,并使用调试,我可以看到这个映射器被正确调用,但是无论使用junit测试还是手动测试,最终响应仍然返回404。 以下是测试: 然后在泽西岛配置中注册: