Spring重载的构造函数自动装配

时间:2016-06-18 06:11:02

标签: java spring constructor

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

@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: ...

是否可能有重载的自动装配构造函数?如果是,那么正确的方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

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