gpt4 book ai didi

java - Spring 4 动态 Bean 创建

转载 作者:行者123 更新时间:2023-12-02 04:09:50 24 4
gpt4 key购买 nike

也许我没有使用正确的术语,这就是为什么我找不到答案,但我想知道如何从数据库中获取信息来创建可以注入(inject)到应用程序中的 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 定义。最好的地方是BeanFactoryPostProcessor 。但这将在上下文初始化期间被调用。这意味着您将没有其他可用的 bean(例如 EntityManagerDataSource...)。

另一种可能性是以某种方式利用上下文层次结构。您可以即时创建和销毁应用程序上下文。然而,实现这一点需要对 Spring 的内部结构有更深入的了解。

<小时/>

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

关于java - Spring 4 动态 Bean 创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33900686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com