Spring 4动态Bean创建

时间:2015-11-24 18:01:14

标签: java spring

也许我没有使用正确的术语,这就是为什么我找不到答案,但我想知道如何从数据库中获取信息来创建我可以注入应用程序的bean?

这是一个例子,我希望可能循环存储在数据库中的一些值并根据它构建这些bean,而不是将其编码在配置文件中。

function foo() {     
   console.log(this.a); 
} 

var a = 2; 

foo();

我如何构建这样的bean并让它们成为应用程序的一部分?

2 个答案:

答案 0 :(得分:2)

如何实现这一目标可能有多种方式,但所有这些方法都非常复杂,存在很多陷阱。我会说在你的例子中你不应该将触发器创建为单独的bean,而是使用单个服务来管理你的日程安排(并将其从Spring中删除)。

Spring的用途是,它不是设计用作动态容器(例如OSGi)。这意味着例如@Autowired依赖关系在上下文启动期间初始化并保持不变直到应用程序上下文被销毁。

但是,可以在初始化期间动态构造bean定义。最好的地方是BeanFactoryPostProcessor。但这将在上下文初始化期间调用。这意味着您将没有其他可用的bean(例如EntityManagerDataSource,...)。

另一种可能性是以某种方式利用上下文层次结构。您可以即时创建和销毁应用程序上下文。无论如何实施都需要更深入了解Spring的内部结构。

其他人的问题:不确定在子上下文初始化期间是否可以从父上下文引用初始化的bean。

答案 1 :(得分:0)

从数据库加载必要的bean属性后,使用BeanDefinitionBuilder。您可以参考this link