通过yaml配置java类对象的列表

时间:2014-09-23 17:27:14

标签: java yaml dropwizard

我正在使用使用Yaml进行配置的dropwizard框架。我想在配置文件中指定类名。是否有一种方法可以让Yaml将其解析为Class对象,或者我是否必须使用字符串进行操作? / p>

class Config {

  .........

  List<Class<?> resourceClasses;    
} 

YAML file

#resource classes
resourceClasses : 
       - com.abc.StoresResource
       - com.abc.MerchantResource

1 个答案:

答案 0 :(得分:0)

您只是在寻找一种方便的方式来注册资源,还是真的想在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));
    }
  }     

}