首页 > 解决方案 > 带有构造函数参数和注入依赖项的 Spring Prototype bean

问题描述

我有一个 bean,它有一些单例依赖项,但也有实例独占参数。构造函数类似于:

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

在上面的例子中,service1andservice2是单例的,Spring 的依赖,必须在创建 bean 时注入。

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

objectProvider.getObject(attribute);

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

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

有没有办法将 ObjectProvider 与具有自定义参数和依赖项的构造函数一起使用?

标签: javaspring

解决方案


你可以这样做:

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

推荐阅读