Рассмотрим определение 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)