Java Spring4动态Bean创建
也许我没有使用正确的术语,这就是我找不到答案的原因,但我想知道如何从数据库中获取信息来创建可以注入应用程序的bean 下面是一个示例,我不想在配置文件中对其进行编码,而是可能循环存储在数据库中的一些值,并在此基础上构建这些bean:Java Spring4动态Bean创建,java,spring,Java,Spring,也许我没有使用正确的术语,这就是我找不到答案的原因,但我想知道如何从数据库中获取信息来创建可以注入应用程序的bean 下面是一个示例,我不想在配置文件中对其进行编码,而是可能循环存储在数据库中的一些值,并在此基础上构建这些bean: @Bean public CronTriggerFactoryBean cronTriggerFactoryBean() { CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
@Bean
public CronTriggerFactoryBean cronTriggerFactoryBean() {
CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
factory.setJobDetail(jobDetailFactoryBean().getObject());
factory.setStartDelay(3000);
factory.setCronExpression("0 0/2 * 1/1 * ? *");
return factory;
}
如何构建这样的bean并使其成为应用程序的一部分?实现这一点的方法可能有多种,但它们都非常复杂,有很多陷阱。我想说的是,在您的示例中,您不应该将触发器创建为单独的bean,而应该使用单个服务来管理您的计划(并将其保留在Spring之外) Spring的问题在于,它不是设计成一个动态容器(比如OSGi)。这意味着,例如,
@Autowired
依赖项在上下文启动期间初始化,并保持不变,直到应用程序上下文被销毁
但是,在初始化期间可以动态构造bean定义。最好的地方是。但这将在上下文初始化期间调用。这意味着您将没有其他可用的bean(如EntityManager
,DataSource
,…)
另一种可能是以某种方式利用上下文层次结构。您可以动态创建和销毁应用程序上下文。然而,实现这一点需要对Spring的内部结构有更深入的了解
其他人的问题:不确定在子上下文初始化期间是否可以从父上下文引用初始化的bean。从数据库加载必要的bean属性后,使用。您可以参考执行类似操作,在启动时从数据库(如服务器)加载配置属性。