加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用焊接与Dropwizard

发布时间:2020-12-14 05:36:58 所属栏目:Java 来源:网络整理
导读:我试图在dropwizard应用程序中使用Weld-SE进行依赖注入.我可以引导Weld并在Application类中注入,如下所示: public class App extends ApplicationAppConfig { @Inject NameService service; @Inject RestResource resource; public static void main(String
我试图在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();
  }
}

我已经在RestResource的一个单独的类中编写了一个生成器方法,这也是很好的注入.但是在资源类中,不会注入服务:

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

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

此服务始终为空.有谁知道如何使这项工作?

解决方法

Dropwizard正在使用Jersey,其依赖注入基于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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读