如何在Dropwizard

时间:2018-04-13 12:48:14

标签: java guice 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);

通常我会按如下方式注入一些Dao

@Produces(MediaType.APPLICATION_JSON)
public class UploadResource {

  private final SomeDao someDao;

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

但是因为我的构造函数已经有一个字符串条目。我如何用Dropwizard优雅地处理这个问题?简单地扩展参数似乎是不洁净的。

1 个答案:

答案 0 :(得分:0)

因此,如果您使用Dropwizard和Guice,并希望使用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());
              }
            });

确保您已通过此帖here

实施lutz所述的方法getUploadFileLocation