gpt4 book ai didi

java - 使用运行时定义的配置按需实例化 Bean

转载 作者:行者123 更新时间:2023-12-02 09:05:58 25 4
gpt4 key购买 nike

在我的应用程序中,我想按需实例化一个类,并将一些运行时参数传递给 is ,并让 Spring 自动实现任何 @Autowired 依赖项。例如,我想按需实例化的类:

@Service
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class FileProcess implements Runnable
{
@Autowired
private MyDAO myDAO;

private String configOne;

private String configTwo;

@Override
public void run()
{
}
}

对象 myDAO 已经存在于 ApplicationContext 中,我希望 Spring 为我实现这种依赖关系。事实上,此类的任何实例化都不应该真正了解 FileProcess 的内部结构,只是它需要配置参数 configOneconfigTwo

为了获取 FileProcess 的实例,我使用了 ApplicationContextgetBean() 方法,但我无法仅传入配置参数:

final FileProcess fileProcess = this.applicationContext.getBean(FileProcess.class, configOne, configTwo)

这会导致错误:

无法解析匹配的构造函数(提示:为简单参数指定索引/类型/名称参数以避免类型歧义

我发现无论我向 FileProcess 添加什么构造函数,我都会遇到相同的错误。我只想传递配置参数,在本例中不是 MyDAO 的实例。同样,必须传入 MyDAO 实例意味着调用者必须了解 FileProcess 的内部结构,并且通常必须了解此类 Bean 的范围。

有没有一种方法可以实现此目的,而无需求助于 @Configuration 类和 @Bean 带注释的方法?

最佳答案

我认为你最好使用工厂bean,例如

@Bean
BiFunction<String, String, FileProcess> createFileProcess(MyDAO dao) {
return (c1, c2) -> {
FileProcess result = new FileProcess(dao) ;
result.setConfig1(c1);
result.setConfig2(c2);
return result;
};
}

这在配置类中,您可以 Autowiring 它以使用您的配置值创建流程对象。

@Autowired
BiFunction<String, String, FileProcess> processFactory;
...
FileProcess p = processFactory.apply("val1", "val2");

关于java - 使用运行时定义的配置按需实例化 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59810956/

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