2014-09-23 151 views
1

我使用的是使用Yaml进行配置的dropwizard框架。我想在配置文件中指定类名称。是否有方法将Yaml解析为Class对象,或者是否必须使用字符串来做到这一点?通过yaml配置java类对象列表

class Config { 

    ......... 

    List<Class<?> resourceClasses;  
} 

YAML file 

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

回答

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)); 
    } 
    }  

} 
+0

我想声明的申请我们公司的事务日志框架上的某些资源classes.So是后者 – 2014-09-23 19:05:12

+0

添加了后者的一个例子 - 看是否适合你的目的。 – condit 2014-09-23 19:23:47