Вставьте ArrayList с помощью RequiredArgsConstructor - PullRequest
0 голосов
/ 22 октября 2018

Я пытался внедрить List в конструктор через lombok RequiredArgsConstructor

    @Slf4j
    @Component
    @RequiredArgsConstructor (onConstructor = @_(@Inject))
    public class ClassA {

        @NonNull private List<GoodSkill> skills;
        ......
     }

Однако при этом возникли ошибки:

[tomcat: launchProperties] org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания компонента с именем 'ClassA', определенным в URL [jar: file: /XXXXX/ClassA.class]: Неудовлетворенная зависимость, выраженная через параметр конструктора 0;Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет квалифицирующего bean-компонента типа java.util.List <\ GoodSkill>: ожидается как минимум 1 bean-компонент, который квалифицируется как кандидат для автопроводки.Аннотации зависимостей: {}

Кажется, что для "List <\ GoodSkill>" НЕТ компонента?Я предполагаю, что есть какое-то специальное правило при введении списка или других коллекций?А что касается класса GoodSkill, я думаю, мне также следует добавить аннотацию типа @Component?

========

edit: более странная вещь, я пересобираю пакет итеперь больше не жалуются, что нет боба для List <\ GoodSkill>, но нет боба для GoodSkill.Я очень смущен.

1 Ответ

0 голосов
/ 23 октября 2018

Инъекция возможна только для управляемых бинов.Итак, для списка у вас должно быть где-то что-то вроде:

@Component
public class GoodSkillList extends ArrayList<GoodSkill>{}

для контейнера, который нужно найти.

Возможно, у вас есть?Если у вас много таких бобов, контейнер / Spring может не решить, какой из них использовать.В этом случае вы можете разграничить возможные альтернативы многими способами, например, вы можете установить ClassA для принятия только:

@NonNull private GoodSkillList skills;

или, альтернативно, вы можете изучить, как ввести / autowire по имени.

...