アプリケーションで Spring の Java ベースの構成を使用しています。他の構成を多数インポートするルート構成クラスがあり、それぞれがより多くの構成をインポートする可能性があります。
@Config
@Import(AnotherConfig.class)
class RootConfig {
// beans
}
@Config
@Import(YetAnotherConfig.class)
class AnotherConfig {
// beans
}
@Config
class YetAnotherConfig {
// beans
}
次に、が に設定されAnnotationConfigWebApplicationContext
ているweb.xml
ファイルでa を宣言して、システムをブートストラップします。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;
}