Как получить доступ к Service из другого класса в Spring?

У меня есть данный класс:

@RequiredArgsConstructor
@Component
public class AgeInputState extends AbstractState {

    private final ClientService clientService;

    public AgeInputState(boolean isInputIndeed) {
        super(isInputIndeed, State.AGE_INPUT);
    }

В котором идет сохранение в бд с помщью сервиса. Также пакет класса указал в Application в аннотации @ComponentScan. Но идея выдает ошибки Class doesn't contain matching constructor for autowiring при наведении на имя класса и также ошибку Variable 'clientService' might not have been initialized при наведении на ClientService.

Как это исправить, чтобы можно было подтянуть слой сервиса?


Ответы (1 шт):

Автор решения: Евгений Быков

Вы создали аннотацию @RequiredArgsConstructor , но при таком случае Spring не заинжектит ваш сервис. Совет поменять эту аннотацию на @AllArgsConstructor тоже не поможет - у вас уже есть свой конструктор.

Правила внедрения зависимостей в спринге: - Если есть только один конструктор, лежат бины ---> он их заинжектик - Если конструкторов несколько или 0, спринг не будет ничего инжектить - Если вы создали свой конструктор, и он не единственный - укажите @Autowired перед нужным конструктором - Если не хотите париться с конструктором, перед каждым Бином укажите @Autowired

В вашем случае:
1.) Удалите аннотацию @RequiredArgsConstructor

2.) Измени

private final ClientService clientService;

на

@Autowired 
private final ClientService clientService;
→ Ссылка