我在我的应用程序中使用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;
}
答案 0 :(得分:1)
@Configuration
类由Spring管理,因此您可以将它们枚举为ctx.getBeansWithAnnotation(Configuration.class)
。
但是,我不确定它在复杂情况下是如何工作的(非@Bean
类中的@Configuration
等等。)