от
Весна документация говорит следующее: Могут быть помечены как обязательные только один аннотированный конструктор в классе, но несколько необязательных конструкторы могут быть аннотированы. В этом случае каждый считается среди кандидатов и весной использует жадный конструктор, зависимости которого могут быть удовлетворены, то есть конструктор, который имеет наибольшее количество аргументов. Алгоритм разрешения конструктора такая же, как для некурящих, аннотируемые классы с перегруженными конструкторами, просто сужение кандидатов аннотированный конструкторов. Я проверил это и я получаю сообщение об ошибке, как только у меня другой конструктор отмечен
@Autowired
package com.example.demo.constructorinjection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ConstructorInjectController {  

private InjectionServiceOne injectionServiceOne;

private InjectionServiceTwo injectionServiceTwo;

@Autowired(required = true)
public ConstructorInjectController(InjectionServiceOne injectionServiceOne,
        InjectionServiceTwo injectionServiceTwo) {
    this.injectionServiceOne = injectionServiceOne;
    this.injectionServiceTwo = injectionServiceTwo;
}

@Autowired(required = false)
public ConstructorInjectController(InjectionServiceTwo injectionServiceTwo) {
    this.injectionServiceTwo = injectionServiceTwo;
}

@Autowired(required = false)
public ConstructorInjectController(InjectionServiceOne injectionServiceOne) {
    this.injectionServiceOne = injectionServiceOne;
}

@Scheduled(fixedRate=1000L)
public void allFieldsConstructorInjectionTest() {
    System.err.println("constructorInjection "   injectionServiceOne.method()   " "   injectionServiceTwo.method());
}
}
Ошибка: орг.springframework.бобы.фабрика.BeanCreationException: ошибка при создании фасоли с именем 'constructorInjectController': недопустимый autowire-отмечены конструктор: публичный com.example.demo.constructorinjection.ConstructorInjectController(com.example.demo.constructorinjection.InjectionServiceOne). Нашли конструктор 'требуется' уже подгружен аннотация: общественные com.example.demo.constructorinjection.ConstructorInjectController(com.example.demo.constructorinjection.InjectionServiceOne,com.example.demo.constructorinjection.InjectionServiceTwo) в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:314) ~[весна-бобы-5.1.8.Отпустить.банки:5.1.8.Релиз] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostprocessors(AbstractAutowireCapableBeanFactory.java:1269) ~[весна-бобы-5.1.8.Отпустить.банки:5.1.8.Релиз] Вопрос: Почему я не могу иметь 2 конструкторы отмечены
@Autowired
? Весна документации четко написано, что я могу иметь более одного конструктора, помеченные
@Autowired
.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...