Я использую конфигурацию Java на основе Spring в своем приложении. У меня есть класс конфигурации корня, который импортирует кучу других конфигураций, каждая из которых может импортировать больше конфигураций и так далее:Как перечислить классы конфигурации 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 ]
}
Update: @ ответ 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;
}
Вам это нужно во время выполнения или просто в разработке? Включение полномасштабного каротажа обычно достаточно, чтобы выполнить (путем ручного осмотра), какие классы конфигурации были загружены. – artbristol
@artbristol, в режиме исполнения идеально ... –
Вы можете попробовать посмотреть на 'org.springframework.beans.factory.config.BeanFactoryPostProcessor', но, не зная своих точных требований, сложно. Вы абсолютно уверены, что вам нужно это сделать? – artbristol