gpt4 book ai didi

java - 将 Weld 与 Dropwizard 结合使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:40 25 4
gpt4 key购买 nike

我正在尝试使用 Weld-SE 在 dropwizard 应用程序中进行依赖注入(inject)。我可以像这样引导 Weld 并注入(inject) Application 类:

public class App extends Application<AppConfig> {

@Inject NameService service;
@Inject RestResource resource;

public static void main(String[] args) throws Exception {
Weld weld = new Weld();
WeldContainer container = weld.initialize();
App app = container.instance().select(App.class).get();
app.run(args);
weld.shutdown();
}
}

我在一个单独的类中为 RestResource 编写了一个生产者方法,这也可以很好地注入(inject)。但是在资源类中,服务没有被注入(inject):

@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public class RestResource {
@Inject NameService service;

@GET
public String test() {
return service.getName();
}
}

这里服务总是空的。有谁知道如何进行这项工作?

最佳答案

Dropwizard 使用的 Jersey 依赖注入(inject)基于 HK2 而不是 CDI。因此,您需要在两者之间架起一座桥梁。这就是 jersey-gf-cdi 的用途:

<dependency>
<groupId>org.glassfish.jersey.containers.glassfish</groupId>
<artifactId>jersey-gf-cdi</artifactId>
</dependency>

您只需要在类路径中包含该 JAR。您可以在此处查看 Jetty 的配置: https://github.com/astefanutti/cdeye/blob/cd6d31203bdd17262aab12d992e2a730c4f8fdbd/webapp/pom.xml

下面是将 CDI bean 注入(inject) JAX-RS 资源的示例: https://github.com/astefanutti/cdeye/blob/cd6d31203bdd17262aab12d992e2a730c4f8fdbd/webapp/src/main/java/io/astefanutti/cdeye/web/BeansResource.java

关于java - 将 Weld 与 Dropwizard 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26747033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com