Mar*_*rth 6 java cdi dropwizard weld
我试图在dropwizard应用程序中使用Weld-SE进行依赖注入.我可以引导Weld并在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();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在RestResource的一个单独的类中编写了一个生成器方法,这也是很好的注入.但是在资源类中,不会注入服务:
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public class RestResource {
@Inject NameService service;
@GET
public String test() {
return service.getName();
}
}
Run Code Online (Sandbox Code Playgroud)
此服务始终为空.有谁知道如何使这项工作?
小智 9
Dropwizard正在使用Jersey,其依赖注入基于HK2而不是CDI.因此,您需要在两者之间架起一座桥梁.这就是jersey-gf-cdi:
<dependency>
<groupId>org.glassfish.jersey.containers.glassfish</groupId>
<artifactId>jersey-gf-cdi</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
您只需要在类路径中拥有该JAR.你可以在这里看到Jetty的配置:https: //github.com/astefanutti/cdeye/blob/cd6d31203bdd17262aab12d992e2a730c4f8fdbd/webapp/pom.xml
以下是向JAX-RS资源注入CDI bean的示例:https: //github.com/astefanutti/cdeye/blob/cd6d31203bdd17262aab12d992e2a730c4f8fdbd/webapp/src/main/java/io/astefanutti/cdeye/web/BeansResource.java
| 归档时间: |
|
| 查看次数: |
2430 次 |
| 最近记录: |