Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring4动态Bean创建_Java_Spring - Fatal编程技术网

Java Spring4动态Bean创建

Java Spring4动态Bean创建,java,spring,Java,Spring,也许我没有使用正确的术语,这就是我找不到答案的原因,但我想知道如何从数据库中获取信息来创建可以注入应用程序的bean 下面是一个示例,我不想在配置文件中对其进行编码,而是可能循环存储在数据库中的一些值,并在此基础上构建这些bean: @Bean public CronTriggerFactoryBean cronTriggerFactoryBean() { CronTriggerFactoryBean factory = new CronTriggerFactoryBean();

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

下面是一个示例,我不想在配置文件中对其进行编码,而是可能循环存储在数据库中的一些值,并在此基础上构建这些bean:

@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属性后,使用。您可以参考

执行类似操作,在启动时从数据库(如服务器)加载配置属性。