簡體   English   中英

如何在Dropwizard中的資源中使用配置字符串和DAO

[英]How to use the config string and DAO in a resource in Dropwizard

我想從我的config.yml中使用一個String,並使用guice在資源中注入一些DAO。 考慮下面的代碼示例

@Path("/upload")
@Produces(MediaType.APPLICATION_JSON)
public class UploadResource {

  private static String UPLOAD_PATH;

  public UploadResource(String uploadPath) {
    this.UPLOAD_PATH = uploadPath;
  }
}

我在構造函數中添加了config.yml參數,並使用以下命令在應用程序類中添加了字符串

final UploadResource uploadResource = new UploadResource(
configuration.getUploadFileLocation());
environment.jersey().register(uploadResource);

通常我會如下注入一些刀

@Produces(MediaType.APPLICATION_JSON)
public class UploadResource {

  private final SomeDao someDao;

  @Inject
  public UploadResource(SomeDao someDao) {
    this.someDao = someDao;
  }
}

但是由於我的構造函數已經有一個字符串條目。 如何使用Dropwizard優雅地處理此問題? 簡單擴展參數似乎是不干凈的。

因此,如果您在Guice中使用Dropwizard,並且想在config.yml使用一些字符串,則需要執行以下操作

到你的資源

@Path("/upload")
@Produces(MediaType.APPLICATION_JSON)
public class UploadResource {

  private final FileDao fileDao;
  private final String uploadPath;

  @Inject
  public UploadResource(FileDao fileDao, @Named("{someName}") String uploadPath) {
    this.fileDao = fileDao;
    this.uploadPath = uploadPath;
  }

}

在應用程序類中,您需要按如下方式綁定常量

@Override
  public void run(
      final BackendConfiguration configuration,
      final Environment environment) {
    Injector injector =
        Guice.createInjector(
            new AbstractModule() {
              @Override
              protected void configure() {

                bindConstant().annotatedWith(Names.named("{someName}"))
                    .to(configuration.getUploadFileLocation());
              }
            });

請確保你實施的方法getUploadFileLocation從這個帖子discribed由盧茨這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM