我在我的应用程序中使用 Spring 的基于 Java 的配置。我有一个根配置类,它导入了一堆其他配置,每个配置都可以导入更多配置等等:
@Config
@Import(AnotherConfig.class)
class RootConfig {
// beans
}
@Config
@Import(YetAnotherConfig.class)
class AnotherConfig {
// beans
}
@Config
class YetAnotherConfig {
// beans
}
AnnotationConfigWebApplicationContext
然后我通过在我的web.xml
文件中声明一个contextConfigLocation
设置为RootConfig
.
有没有办法确定引导我的应用程序的全套配置类?像这样的一些函数(可能需要一个子类ctx
......):
List<Class> readConfigClasses(ApplicationContext ctx) {
// what goes here?
// should return [ RootConfig.class,
// AnotherConfig.class,
// YetAnotherConfig.class ]
}
更新:@axtavt 的答案大部分都在那里,返回实际的配置对象本身,在我的例子中,它们是由 CGLIB 增强的实例。抓住这些代理的超类就可以了:
List<Class<?>> readConfigClasses(final ApplicationContext ctx) {
List<Class<?>> configClasses = new ArrayList<Class<?>>();
for (final Object config :
ctx.getBeansWithAnnotation(Configuration.class).values()) {
configClasses.add(config.getClass().getSuperclass());
}
return configClasses;
}