我正在使用使用Yaml进行配置的dropwizard框架。我想在配置文件中指定类名.Yaml是否有一种将其解析为Class对象的方法,还是我必须使用字符串来完成它?
class Config {
.........
List<Class<?> resourceClasses;
}
YAML file
#resource classes
resourceClasses :
- com.abc.StoresResource
- com.abc.MerchantResource
最佳答案
您是在寻找一种便捷的方法来注册资源,还是真的要在YAML配置中配置资源?如果是前者,这就是我要做的:
for (ClassInfo classInfo: ClassPath.from(getClass().getClassLoader()).getTopLevelClasses("com.abc")) {
environment.jersey().register(i.getInstance(classInfo.load()));
}
如果是后者,则必须自己解析这些字符串。我认为YAML配置不会为您做到这一点。这样的事情会做:
class Config {
List<Class<?>> resourceClasses = new ArrayList<Class<?>>();
@JsonProperty("resourceClasses")
public void setResourceClasses(Collection<String> classNames) throws ClassNotFoundException {
for (String className : classNames) {
resourceClasses.add(Class.forName(className));
}
}
}