如何在 Dropwizard 的资源中使用配置字符串和 DAO
How to use the config string and DAO in a resource in Dropwizard
我想使用我的 config.yml 中的字符串并在资源中注入一些带有 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 参数,并使用以下命令在应用程序中添加字符串 class
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 优雅地处理这个问题?简单地扩展参数似乎是不干净的。
因此,如果您将 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;
}
}
并且在应用程序中 class 您需要按如下方式绑定常量
@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());
}
});
确保您实现了 lutz 在此 post
中描述的方法 getUploadFileLocation
我想使用我的 config.yml 中的字符串并在资源中注入一些带有 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 参数,并使用以下命令在应用程序中添加字符串 class
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 优雅地处理这个问题?简单地扩展参数似乎是不干净的。
因此,如果您将 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;
}
}
并且在应用程序中 class 您需要按如下方式绑定常量
@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());
}
});
确保您实现了 lutz 在此 post
getUploadFileLocation