web-dev-qa-db-fra.com

Envisagez de définir un bean de type 'service' dans votre configuration [Spring Boot]

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
19
kittu

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.

33
dunni

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.

6
Ahmed Tawila

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.

3
Stephane Nicoll

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.

3
Tarun

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

3
Jeberdson Abraham

Vous devez mettre à jour votre

scanBasePackages = { "com.exm.Java" }

ajouter le chemin d'accès à votre service (après l'avoir annoté avec @service)

1
yahya Harrathi

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)

0
Arun Tiwari

Assurez-vous d'avoir ajouté la dépendance dans le fichier pom.xml ou gradle.

printemps-boot-starter-data-jpa

0
Kumar Kathir