Ошибка создания bean-компонента при внедрении зависимостей с помощью Spring-Boot - PullRequest
0 голосов
/ 23 мая 2019

Вот мой код - https://github.com/iyngaran/to-do-list

У меня есть класс UserRepository в пакете info.iyngaran.core.auth.repository, и он помечен @Repository.

Когда я пытаюсь внедрить его в класс CustomUserDetailsService, который входит в пакет info.iyngaran.core.auth.security, я получаю следующую ошибку.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'customUserDetailsService': Unsatisfied dependency expressed through field 'userRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'info.iyngaran.core.auth.repository.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Может ли кто-нибудь помочь мне выяснить проблему по этому вопросу? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Я исправил проблему, добавив следующую строку в основной класс весенней загрузки.

@EnableJpaRepositories({"info.iyngaran.core","info.iyngaran.todolistapi"})

и это решило мою проблему. Вот подробности - https://stackoverflow.com/a/53172477/9348637

0 голосов
/ 23 мая 2019

Основная проблема - компонентное сканирование.Так что расположите ваш код следующим образом

Переместите ваш класс TodolistApiApplication в корень пакета info.iyngaran

и очистите беспорядок

package info.iyngaran;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.annotation.PostConstruct;
import java.util.TimeZone;

@SpringBootApplication
public class TodolistApiApplication {

    @PostConstruct
    void init() {
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    }


    public static void main(String[] args) {
        SpringApplication.run(TodolistApiApplication.class, args);
    }

}

, также используйте инжектор конструктора (необязательно для исправления).полевая инъекция очень плохая практика

private final UserRepository userRepository;

public CustomUserDetailsService(UserRepository userRepository) {
    this.userRepository = userRepository;
}
...