Squeak.ru - шаблоны программирования

Как исправить поле, требующее bean-компонента типа, который не может быть найден, исключение Spring Boot

Я работаю с учебным пособием по весенней загрузке от javabrains, и все было ясно, пока не поместил CrudRepository в проект. Ниже вы можете найти мой основной класс:

package pl.springBootStarter.app;

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

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

Класс обслуживания:

package pl.springBootStarter.app.topic;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Service
public class TopicService
{
    @Autowired
    private TopicRepository topicRepository;

    private List<Topic> topics =  new ArrayList<>(Arrays.asList(
            new Topic("spring","spring framework", "spring framework dectription"),
            new Topic("sprin","spring framework", "spring framework dectription"),
            new Topic("spri","spring framework", "spring framework dectription")));

    public  List<Topic> getAllTopics()
    {
    //    return topics;
    List<Topic> t = new ArrayList<Topic>();
    topicRepository.findAll().forEach(t::add);
    return t;
    }

    public Topic getTopic (String id)
    {
        return   topics.stream().filter( t -> t.getId().equals(id)).findFirst().get();
    }

    public void addTopic(Topic topic) {
        topicRepository.save(topic);
    }

    public void updateTopic(Topic topic, String id)
    {
        topics.set(topics.indexOf(topics.stream().filter(t-> t.getId().equals(id)).findFirst().get()), topic);
    }

    public void deleteTopic(String id)
    {
        topics.remove(topics.stream().filter(t -> t.getId().equals(id)).findFirst().get());
    }
}

И Repository интерфейс:

package pl.springBootStarter.app.topic;

import org.springframework.data.repository.CrudRepository;

public interface TopicRepository extends CrudRepository<Topic,String>
{

}

Когда я запускаю приложение, возникает проблема с внедрением TopicRepository в поле topicRepository в классе TopicService. Я получаю следующую ошибку:

Error starting ApplicationContext. To display the conditions report re-       run your application with 'debug' enabled.
2019-05-01 10:33:52.206 ERROR 6972 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field topicRepository in pl.springBootStarter.app.topic.TopicService required a bean of type 'pl.springBootStarter.app.topic.TopicRepository' that could not be found.

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

Что может быть причиной того, что Spring не может выполнить автопроводку?


Ответы:


1

Убедитесь, что курс будет отсканирован к весне!

(это может помочь, если проблема в этом: проблемы Intellij Springboot при запуске ).


При желании вы можете аннотировать TopicRepository как @Repository.

@Repository
public interface TopicRepository extends CrudRepository<Topic,String>
{
}

См. демонстрационный код здесь: https://github.com/lealceldeiro/repository-demo

01.05.2019
  • @Elrok, ​​у тебя есть репозиторий, в который я могу заглянуть? Это должно работать. Я сам использовал его много раз. Убедились ли вы, что Spring обнаруживает класс TopicRepository и регистрируется как компонент? 01.05.2019
  • В моем проекте всего 4 класса: CourseApiDataApplication TopicRepository TopicService Topic — класс, который содержит поля, геттеры и сеттеры. 01.05.2019
  • Я совсем новичок в Spring. Как убедиться, что Spring обнаруживает класс TopicRepository и регистрируется как компонент? 01.05.2019
  • Я уверен, что проблема в моем приложении заключается в том, что Spring не находит класс TopicRepository как bean-компонент. Поэтому он не знает, что должно быть введено в поле TopicRepository в классе TopicService. 01.05.2019
  • @Elrok см. это: stackoverflow.com/ вопросов/52154652/ Я создаю демо для вас... дайте несколько минут 01.05.2019

  • 2

    Spring не может внедрить bean-компонент, потому что он не был создан.

    Вы должны указать Spring сгенерировать реализацию объявленных интерфейсов репозитория, используя аннотацию @EnableJpaRepositories(basePackages={"pl.springBootStarter.app"}) для любого из ваших классов конфигурации или класса, аннотированного @SpringBootApplication. Это должно решить вашу проблему.

    01.05.2019
  • Я поместил это в свой основной класс, и теперь у меня есть другое исключение: для поля topicRepository в pl.springBootStarter.app.topic.TopicService требуется bean-компонент с именем «entityManagerFactory», который не может быть найден. Точка внедрения имеет следующие аннотации: - @org.springframework.beans.factory.annotation.Autowired(required=true) 01.05.2019
  • похоже, вы не настроили контекст сохранения, можете ли вы опубликовать свой файл конфигурации? 01.05.2019
  • Решение от @lealceldeiro сработало отлично. Мне пришлось поместить @ComponentScan(packageName) из моего пакета, где у меня были классы Service Repository и Controler. Dziękuję za zainteresowanie tematem. 01.05.2019

  • 3

    Я получил похожее сообщение, и мне не хватало аннотации @Service в классе Service. Простая ошибка, публикую на случай, если это поможет кому-то еще.

    03.10.2020

    4

    Для всех, кто попал сюда, погуглив общее сообщение об ошибке компонента, но на самом деле пытается добавить притворный клиент в свое приложение Spring Boot с помощью аннотации @FeignClient на вашем клиенте. интерфейс, ни одно из вышеперечисленных решений не будет работать для вас.

    Чтобы решить эту проблему, вам нужно добавить аннотацию @EnableFeignClients к вашему классу приложения, например:

    @SpringBootApplication
    // ... (other pre-existing annotations) ...
    @EnableFeignClients // <------- THE IMPORTANT ONE
    public class Application {
    
    29.09.2020

    5

    Я получил похожее сообщение.

    дело в том, что мой основной пакет был com.example, а пакет для других классов был com.xyz

    поэтому, когда я изменил имя пакета другого класса на com.example.topic

    то есть, наконец, основным пакетом был com.example, а пакетом для другого класса был com.example.topic.

    Простая ошибка, размещение на случай, если это поможет кому-то еще.

    05.11.2020
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...