【问题标题】:Spring Overloaded Constructor AutowiringSpring 重载的构造函数自动装配
【发布时间】:2016-06-18 06:11:02
【问题描述】:

我有一个具有重载构造函数的类,如下所示:

@Component
public class MyClass {
    private ClassA myMemberA;
    private ClassA myMemberB;

    @Autowire
    public MyClass(@Qualifier ("qualifierA") ClassA objectA, ClassA objectB) {
       myMemberA = objectA;
       myMemberB = objectB;
    }

    @Autowire
    public MyClass(ClassA objectA) {

       myMemberA = objectA;
    }
}

基本上,一个构造函数有两个ClassA 参数,一个构造函数只有一个参数。我定义了两个ClassA 类型的bean。 我希望根据用例相应地调用和自动装配两个构造函数之一。

当我运行这段代码时,我得到了错误:

Invalid autowire-marked constructor: ...
Found another constructor with 'required' Autowired annotation: ...

是否可以重载自动装配的构造函数?如果是,正确的做法是什么?

谢谢!

【问题讨论】:

  • 描述应该调用每个构造函数的场景。指定条件

标签: java spring constructor


【解决方案1】:
  1. 您需要通过编写如下内容来定义 Spring 将优先考虑哪个构造函数:@Autowired(required=true)@Autowired(required=false)。您只能拥有一个带有@Autowired(required=true) 的构造函数。默认情况下,如果您没有定义所需的属性,它将被设置为 true,这就是您的问题。
  2. 我看不出拥有两个 Autowired 构造函数的意义,如果它们中只有一个会被连接的话。如果您尝试自动装配ClassA 的两个实例,最好将@Autowired 注释添加到设置器或变量中。

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 2012-05-06
    • 2016-09-04
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多