Springboot — точка внедрения имеет следующие аннотации: — @org.springframework.beans.factory.annotation.Autowired(required=true)

Я получаю эту ошибку: `

***************************
APPLICATION FAILED TO START
***************************
Description:

Field questionDao in com.surbhi.quizapp.service.QuestionService required a bean of type 'com.surbhi.quizapp.dao.QuestionDao' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type 'com.surbhi.quizapp.dao.QuestionDao' in your configuration.

` У меня есть следующая файловая структура и файлы.

Структура файла: https://i.sstatic.net/8jSrf.png

ВопросService.java

@Service
public class QuestionService {

  QuestionDao questionDao;

  public QuestionService(QuestionDao questionDao) {
    super();
    this.questionDao = questionDao;
  }

  public ResponseEntity<List<Question>> getAllQuestions() {
    try {
      return new ResponseEntity<>(questionDao.findAll(), HttpStatus.OK);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return new ResponseEntity<>(new ArrayList<>(), HttpStatus.BAD_REQUEST);
  }

  public ResponseEntity<List<Question>> getQuestionsByCategory(
    String category
  ) {
    try {
      return new ResponseEntity<>(
        questionDao.findByCategory(category),
        HttpStatus.OK
      );
    } catch (Exception e) {
      e.printStackTrace();
    }
    return new ResponseEntity<>(new ArrayList<>(), HttpStatus.BAD_REQUEST);
  }

  public ResponseEntity<String> addQuestion(Question question) {
    questionDao.save(question);
    return new ResponseEntity<>("success", HttpStatus.CREATED);
  }
}

ВопросDao.java

@Repository
public interface QuestionDao extends JpaRepository<Question, Integer> {
  List<Question> findByCategory(String category);

  @Query(
    value = "SELECT * FROM question q Where q.category=:category ORDER BY RANDOM() LIMIT :numQ",
    nativeQuery = true
  )
  List<Question> findRandomQuestionsByCategory(String category, int numQ);
}

Я также пробовал удалить @Autowire и создать конструктор, но это тоже не сработало и выдало эту ошибку.

***************************
APPLICATION FAILED TO START
***************************
Description:

Parameter 0 of constructor in com.surbhi.quizapp.service.QuestionService required a bean of type 'com.surbhi.quizapp.dao.QuestionDao' that could not be found.

Action:
Consider defining a bean of type 'com.surbhi.quizapp.dao.QuestionDao' in your configuration.

Что делать, также добавлено

@SpringBootApplication(scanBasePackages = { «com.surbhi.quizapp.controller», «com.surbhi.quizapp.dao», «com.surbhi.quizapp.model», «com.surbhi.quizapp.service»})

в основном, но это тоже не работает.

Использовал @ComponentScan, не работает

Основной файл класса:

@SpringBootApplication

@ComponentScan("com.surbhi.quizapp.dao")

public class QuizappApplication {

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

}

Не публикуйте изображения кода. И вот почему: Meta.stackoverflow.com/a/285557/1847378

AndrewL 15.03.2024 01:40

Пробовали ли вы добавить @ComponentScan("com.surbhi.quizapp.dao") в основной класс приложения?

Ethan Conrad 15.03.2024 01:47

Да, тоже не работает.

Mini 15.03.2024 01:51

я начну с комментария findRandomQuestionsByCategory, если это сработает, вы знаете, в чем ваша проблема

salhi mustapha 15.03.2024 01:57

Я прокомментировал findRandomQuestionsByCategory, но это ничего не меняет, выдавая ту же ошибку.

Mini 15.03.2024 02:02

Не уверены, используете ли вы Maven/Gradle и т. д., но, возможно, проверьте файл pom.xml или build.gradle на предмет ваших зависимостей. Вам следует использовать Spring-boot-starter-data-jpa, а не Spring-data-JPA. Просто идея

Ethan Conrad 15.03.2024 02:12

Это странно. Когда путь сканирования указан с помощью @SpringBootApplication(scanBasePackages = {""}), он работает без проблем при воспроизведении со структурой пакета спрашивающего. Переместите класс QuizappApplication в начало пакета и измените его для сканирования подпакетов.

soonhankwon 15.03.2024 02:17

Добавьте @EnableJpaRepositories в свое приложение для сканирования репозиториев. AFAIK jparepos не обнаруживаются при сканировании компонентов.

vratojr 15.03.2024 06:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
8
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Глядя на загруженную вами фотографию упаковки, кажется, что там два QuizappApplication класса. (com.surbhi.quizapp, com.surbhi.quizapp.service)

Возникнет ли та же проблема, если я удалю класс QuizappApplication, существующий в пакете com.surbhi.quizapp.service, и напишу его следующим образом?

@SpringBootApplication
public class QuizappApplication {

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

}

Кроме того, аннотация @Repository не требуется в интерфейсе QuestionDao.

Другие вопросы по теме