具有构造函数参数和注入依赖项的Spring Prototype bean

时间:2019-05-23 20:09:17

标签: java spring

我有一个具有某些 singleton 依赖项以及实例专有参数的bean。构造函数类似于:

@Autowired
public PrototypeBean(CustomAttribute attribute, Service1 service1, Service2 service2) {
[...some code...]
}

在上面的示例中,service1service2是Singleton,Spring,依赖项,必须在创建bean时注入。

在另一个类上,我有一个ObjectProvider,应该创建上面的原型bean的实例。我正在尝试这样的事情:

objectProvider.getObject(attribute);

但是Spring返回一个错误,指出找不到与参数匹配的构造函数。

我可以轻松地将代码从基于构造函数的注入更改为基于属性的注入,并且可以正常工作。但这不是一个好习惯,会使测试更难编写。

是否可以将ObjectProvider与同时具有自定义参数和依赖项的构造函数一起使用?

1 个答案:

答案 0 :(得分:0)

您可以这样做:

@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);
   }
}