合并两个 Spring 应用程序上下文而不关闭第一个应用程序上下文

Merging two Spring Application Context without closing the first application context

在我们的应用程序启动中,我们正在创建一个具有自己的 bean 配置的应用程序上下文 xml。然后根据某些逻辑,我们需要动态地 load/import 第二个 bean 配置到现有的应用程序上下文中。

一个选项是关闭现有的应用程序上下文并通过导入两个 bean 定义 xml 文件来创建新的应用程序上下文。但是关闭应用程序上下文需要时间(即销毁 beans/executors 等),有没有办法在不关闭现有应用程序上下文的情况下合并两个应用程序上下文。

使用多个应用程序上下文时,您可以实现层次结构,这在这里可能会有所帮助。然后,您首先创建第一个实例,确定在第一个实例作为父实例的新实例中接下来要加载的内容。

像这样

ApplicationContext parent= new ClassPathXmlApplicationContext("your-context.xml");
String nextXml = logicToDetermineXml();
ApplicationContext toUse = new (new String[] {nextXml}, parent);

现在您可以在应用程序的其余部分使用名为 toUse 的那个。无需重新创建整个上下文。