如何使泽西岛与匕首依赖注入一起工作?
泽西岛通常使用HK2依赖注入,但我想将泽西岛与匕首2一起使用。Dagger和HK2都实现了JSR 330,我已经将其作为证据,证明这应该是可能的,而无需太多的努力。我找到了让泽西岛与CDI(例如Weeld),Spring DI和Guice一起使用的方法,但我在Dagger上找不到任何东西。
为了提供一些上下文:我在 SE 环境中运行 Grizzly-Jersey 服务器,而不是在 EE 容器中运行。我的 Maven 项目有 和 作为依赖项,但不是 ,因为我想用 Dagger 替换 HK2。com.google.dagger:dagger
org.glassfish.jersey.containers:jersey-container-grizzly2-http
org.glassfish.jersey.inject:jersey-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) {
...
}
}
}
运行应用程序会立即导致异常:似乎需要此工厂的 Dagger 实现。IllegalStateException: InjectionManagerFactory not found.
我的问题是:如何将匕首与泽西岛相结合?