Как получить доступ к 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;