作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我想按需实例化一个类,并将一些运行时参数传递给 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
的内部结构,只是它需要配置参数 configOne
和 configTwo
为了获取 FileProcess
的实例,我使用了 ApplicationContext
的 getBean()
方法,但我无法仅传入配置参数:
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/
我是一名优秀的程序员,十分优秀!