Рассмотрим определение bean типа 'service' в вашей конфигурации [Spring boot]

Я получаю ошибку при запуске основного класса.

Ошибка:

Action:
Consider defining a bean of type 'seconds47.service.TopicService' in your configuration.

Description:
Field topicService in seconds47.restAPI.topics required a bean of type 'seconds47.service.TopicService' that could not be found

Интерфейс TopicService:

public interface TopicService {

    TopicBean findById(long id);

    TopicBean findByName(String name);

    void saveTopic(TopicBean topicBean);

    void updateTopic(TopicBean topicBean);

    void deleteTopicById(long id);

    List<TopicBean> findAllTopics(); 

    void deleteAllTopics();

    public boolean isTopicExist(TopicBean topicBean);
}

контроллер:

@RestController
public class topics {

    @Autowired
    private TopicService topicService;

    @RequestMapping(path = "/new_topic2", method = RequestMethod.GET)
    public void new_topic() throws Exception {
        System.out.println("new topic JAVA2");
    }
}

Класс реализации:

public class TopicServiceImplementation implements TopicService {

    @Autowired
    private TopicService topicService;

    @Autowired
    private TopicRepository topicRepository;

    @Override
    public TopicBean findById(long id) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public TopicBean findByName(String name) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void saveTopic(TopicBean topicBean) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void updateTopic(TopicBean topicBean) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void deleteTopicById(long id) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public List<TopicBean> findAllTopics() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void deleteAllTopics() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public boolean isTopicExist(TopicBean topicBean) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}

Остальные классы также определены. Я не знаю, почему его бросание, несмотря на объявление componentScan в основном классе.

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

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
@ComponentScan(basePackages = {"seconds47"})
@EnableJpaRepositories("seconds47.repository")
public class Application {

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

У меня есть мои пакеты следующим образом:

seconds47
seconds47.beans
seconds47.config
seconds47.repository
seconds47.restAPI
seconds47.service

Ответ 1

Класс должен иметь аннотацию @Component или вывод этого (например, @Service, @Repository и т.д.) для распознавания в виде Spring bean при сканировании компонентов. Поэтому, если вы добавите @Component в класс, он должен решить вашу проблему.

Ответ 2

Так как TopicService является классом Service, вы должны аннотировать его с помощью @Service, так что Spring будет использовать этот bean для вас. Например:

@Service
public class TopicServiceImplementation implements TopicService {
    ...
}

Это решит вашу проблему.

Ответ 3

Вы пытаетесь ввести сам bean. Это явно не сработает.

TopicServiceImplementation реализует TopicService. Этот класс пытается autowire (по полю!) `TopicService. Таким образом, вы, по сути, просите контекст для инъекций.

Похоже, вы отредактировали содержимое сообщения об ошибке: Field topicService in seconds47.restAPI.topics не является классом. Пожалуйста, будьте осторожны, если вам нужно скрыть конфиденциальную информацию, так как это значительно усложняет работу других людей.

Вернемся к актуальной проблеме, похоже, что инъекция TopicService сама по себе является сбоем на вашей стороне.

Ответ 4

Я решил заменить поврежденные файлы JAR.

Но чтобы найти эти поврежденные jar файлы, я должен запустить свое приложение в трех IDE- 1) Intellij Idea 2) NetBeans 3) Eclipse.

NetBeans дал мне информацию о максимальном количестве поврежденных банок. В Netbeans наряду с прогоном я использую опцию сборки (после щелчка правой кнопкой мыши на проекте), чтобы узнать больше о поврежденных банках.

Мне потребовалось более 15 часов, чтобы выяснить причину этих ошибок. Надеюсь, это поможет кому-нибудь.

Ответ 5

Я решил эту проблему, создав компонент для моего сервиса в файле SpringConfig.java. Пожалуйста, проверьте код ниже,

@Configuration 
public class SpringConfig { 

@Bean
public TransactionService transactionService() {
    return new TransactionServiceImpl();
}

}

Путь к этому файлу показан на рисунке ниже, структура папки загрузочного приложения Spring

Ответ 6

Вы должны обновить свой

scanBasePackages = { "com.exm.java" }

чтобы добавить путь к вашему сервису (после аннотации его с помощью @service)

Ответ 7

Убедитесь, что вы добавили зависимость в файл pom.xml или gradle.

spring-загрузка-стартер-данные JPA

Ответ 8

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

Ответ 9

  Рассмотрим определение бина типа    'moviecruser.repository.MovieRepository' в вашем     конфигурации.

Этот тип проблемы будет генерироваться, если вы не добавили  правильная зависимость. Это та же проблема, с которой я столкнулся, но после того, как нашел свой JPA  Зависимость не работает правильно, поэтому убедитесь, что сначала  Зависимость правильная или нет.

Например: -

Зависимость, которую я использовал:

    <dependency>
       <groupId>org.springframework.data</groupId>      
       <artifactId>spring-data-jpa</artifactId>
    </dependency>

Описание (получено это исключение): -

Параметр 0 конструктора в     moviecruser.serviceImple.MovieServiceImpl требуется компонент     введите 'moviecruser.repository.MovieRepository', который не может      быть найденным.

Действие:

После изменения зависимости: -

    <!-- 
    <dependency>
       <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

Ответ: -

2019-09-06 23: 08: 23.202 INFO 7780 -
       [Основной] moviecruser.MovieCruserApplication]: Начало        Приложение MovieCruser за 10,585 секунд (JVM работает для      11,357)