【发布时间】:2014-08-27 17:52:56
【问题描述】:
我有一个要求,需要从“外部”源动态加载 Spring bean 定义。此外部源可以是某种类型的文件、数据库或 Web 服务。
我已经阅读了可以执行此类操作的 BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor 类,但我遇到了一个巨大的挑战:
从外部源检索 bean 定义信息的对象被配置为 bean 本身(例如 DatabaseBeanDefinitionProvider),因此它需要配置所有依赖项(例如 DataSource)并且可以从上下文中获取数据。
我不确定在 Spring 应用程序上下文生命周期中的何处/何时执行此操作:本质上是使用“现有 bean 来添加新 bean”到上下文中。
有什么想法专家吗?
【问题讨论】:
-
我认为您需要动态创建和管理子上下文。几乎没有办法将 bean 定义添加到已经初始化的上下文中(或者每次修改 bean 定义时都需要
refresh上下文)。 -
您要动态添加的 bean 是否都实现了一组已知的接口?
-
@PavelHoral - 这些动态 bean 的加载是一个应用程序初始化过程,因此它只需要刷新一次(我认为),尽管我仍然有点不确定初始化的位置这样做。
-
@JohnR - 不幸的是,它们没有实现通用接口。
-
正如@PavelHoral 提到的,子上下文听起来是个不错的选择。你有没有尝试/考虑过like this Spring Integration sample?虽然它使用的是 Spring Integration,但基本原理是一样的。
标签: java spring spring-mvc