2016-06-18 2 views
1

У меня есть класс с перегруженными конструкторами, как это:Spring перегруженный конструктор автоматического связывания

@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. Я хотел бы, чтобы один из двух конструкторов был вызван и автоподсвещен соответственно в зависимости от варианта использования.

Когда я запустил этот код, я получил ошибку:

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

Можно ли иметь перегруженные autowired конструкторов? Если да, каков правильный способ сделать это?

Спасибо!

+0

Опишите сценарии, в которых должен быть вызван каждый конструктор. Укажите условия –

ответ

0
  1. Вам нужно определить, какой конструктор Spring будет приоритизации, написав что-то вроде этого: @Autowired(required=true) или @Autowired(required=false). Вам разрешено иметь только один конструктор с @Autowired(required=true). По умолчанию, если вы не определяете требуемое свойство, оно будет установлено в true, что является проблемой в вашем случае.
  2. Я не вижу смысла иметь два Autwired конструктора, если только один из них будет подключен. Если вы пытаетесь Autowire два экземпляра ClassA, возможно, было бы лучше добавить аннотацию @Autowired к сеттерам или переменным.
Смежные вопросы