如何将@Autowired 构造函数参数分别设置为“required=false”

新手上路,请多包涵

我在 @Configuration 类构造函数下使用 @Autowired 注释。

 @Configuration
public class MyConfiguration {

   private MyServiceA myServiceA;
   private MyServiceB myServiceB

   @Autowired
   public MyConfiguration(MyServiceA myServiceA, MyServiceB myServiceB){
     this.myServiceA = myServiceA;
     this.myServiceB = myServiceB;
   }
}

正如 Spring 文档 所说,我可以声明是否需要带注释的依赖项。

如果我将构造函数下的 @Autowired 注释标记为 required=false ,我是说不需要自动装配的两个服务 (如 Spring 文档所述)

 @Autowired(required = false)
public MyConfiguration(MyServiceA myServiceA, MyServiceB myServiceB){
  this.myServiceA = myServiceA;
  this.myServiceB = myServiceB;
}

来自 Spring 文档:

在多参数方法的情况下,“必需”参数适用于所有参数。

如何分别为每个构造函数参数设置 required 属性?是否需要在每个字段下使用 @Autowired 注解?

问候,

原文由 jcgarcia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 984
1 个回答

如果您使用的是 Java 8 和 Spring Framework 4,则可以使用 Optional

 @Autowired
public MyConfiguration(Optional<MyServiceA> myServiceA, Optional<MyServiceB> myServiceB){
  myServiceA.ifPresent(service->{this.myServiceA = service});
  myServiceB.ifPresent(service->{this.myServiceB = service});
}

原文由 Strelok 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题