我正在使用使用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));
    }
  }

}

07-27 13:27