我有一个 bean,它具有一些单例依赖项,但也有实例独占参数。构造函数类似于:
@Autowired
public PrototypeBean(CustomAttribute attribute, Service1 service1, Service2 service2) {
[...some code...]
}
在上面的示例中,service1
和 service2
是单例、Spring 依赖项,必须在创建 bean 时注入(inject)。
在另一个类上,我有一个 ObjectProvider
,它应该创建上面原型(prototype) bean 的实例。我正在尝试这样的事情:
objectProvider.getObject(attribute);
但是 Spring 返回一个错误,指出它找不到与参数匹配的构造函数。
我可以轻松地将代码从基于构造函数的注入(inject)更改为基于属性的注入(inject),并且它将起作用。但这不是一个好的做法,并且会使测试更难编写。
有没有办法将 ObjectProvider 与同时具有自定义参数和依赖项的构造函数一起使用?
最佳答案
你可以这样做:
@Configuration
static class PrototypeBeanConfiguration {
private final Service1 service1;
private final Service2 service2;
public PrototypeBeanConfiguration(Service1 service1, Service2 service2) {
this.service1 = service1;
this.service2 = service2;
}
@Bean
@Scope(value = BeanDefinition.SCOPE_PROTOTYPE)
public PrototypeBean(CustomAttribute attribute) {
return new PrototypeBean(attribute, service1, service2);
}
}
关于java - 带有构造函数参数和注入(inject)依赖项的 Spring Prototype bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56282280/