Je reçois une erreur lorsque je cours en classe principale.
Erreur:
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
Interface 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);
}
manette:
@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");
}
}
Classe d'implémentation:
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.
}
}
Les autres classes sont également définies. Je ne sais pas pourquoi il lance malgré la déclaration de componentScan
dans la classe principale.
Classe principale:
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
@ComponentScan(basePackages = {"seconds47"})
@EnableJpaRepositories("seconds47.repository")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
J'ai mes paquets comme ça:
seconds47
seconds47.beans
seconds47.config
seconds47.repository
seconds47.restAPI
seconds47.service
Une classe doit avoir le @Component
annotation ou une dérivation de celle-ci (comme @Service
, @Repository
etc.) à reconnaître comme un bean Spring par le balayage des composants. Donc, si vous ajoutez @Component
à la classe, cela devrait résoudre votre problème.
Puisque TopicService
est une classe Service
, vous devez l'annoter avec @Service
, de sorte que Spring utilise ce haricot pour vous. Ainsi:
@Service
public class TopicServiceImplementation implements TopicService {
...
}
Cela résoudra votre problème.
Vous essayez d'injecter un haricot en soi. Cela ne va évidemment pas au travail.
TopicServiceImplementation
implémente TopicService
. Cette classe tente d'autowire (par champ!) Un `TopicService. Donc, vous demandez essentiellement au contexte de s’injecter.
Il semble que vous ayez modifié le contenu du message d'erreur: Field topicService in seconds47.restAPI.topics
n'est pas une classe. S'il vous plaît soyez prudent si vous avez besoin de cacher des informations sensibles car cela rend beaucoup plus difficile pour les autres de vous aider.
Revenons à la question, il semblerait que l’injection de TopicService
constitue en soi un petit problème.
J'ai résolu en remplaçant les fichiers JAR corrompus.
Mais pour trouver ces fichiers JAR corrompus, je dois exécuter mon application dans trois IDE-1) Idée Intellij 2) NetBeans 3) Eclipse.
Netbeans m'a donné des informations sur le nombre maximal de fichiers jar corrompus. Dans Netbeans avec l'exécution, j'utilise l'option de construction (après un clic droit sur le projet) pour en savoir plus sur les fichiers JAR corrompus.
Il m'a fallu plus de 15 heures pour trouver la cause de ces erreurs. J'espère que ça aidera quelqu'un.
J'ai résolu ce problème en créant un bean pour mon service dans le fichier SpringConfig.Java. S'il vous plaît vérifier le code ci-dessous,
@Configuration
public class SpringConfig {
@Bean
public TransactionService transactionService() {
return new TransactionServiceImpl();
}
}
Le chemin de ce fichier est indiqué dans l'image ci-dessous, Structure du dossier de l'application de démarrage Spring
Vous devez mettre à jour votre
scanBasePackages = { "com.exm.Java" }
ajouter le chemin d'accès à votre service (après l'avoir annoté avec @service)
Pensez à définir un bean de type 'moviecruser.repository.MovieRepository' dans votre configuration.
Ce type de problème générera si vous n'avez pas ajouté la dépendance correcte. C'est le même problème que j'ai rencontré mais après avoir constaté que ma dépendance JPA ne fonctionnait pas correctement, assurez-vous donc que la première dépendance est correcte ou non.
Par exemple:-
La dépendance que j'ai utilisée:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
Description (a cette exception): -
Le paramètre 0 du constructeur dans moviecruser.serviceImple.MovieServiceImpl nécessitait un bean de type 'moviecruser.repository.MovieRepository' introuvable.
Action:
Après le changement de dépendance: -
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Réponse:-
2019-09-06 23: 08: 23.202 INFO 7780 -
[main] moviecruser.MovieCruserApplication]: démarrage de MovieCruserApplication en 10.585 secondes (la machine virtuelle Java s'exécute depuis 11.357)
Assurez-vous d'avoir ajouté la dépendance dans le fichier pom.xml ou gradle.
printemps-boot-starter-data-jpa