L'Injection de autocâblés dépendances a échoué, ne Pouvait pas autowire champ
Je sais que cette question a été posé beaucoup et je prends le risque d'un double (ou triple ou quadruple) sujet, mais les solutions proposées ne semblent pas fonctionner pour moi.
J'ai de la difficulté avec le tant redouté ne peut pas autowire erreur. Premier temps la mise en place complète du Printemps de projet à partir de zéro, donc je ne sais pas vraiment quel est le problème.
C'est ma configuration actuelle:
ProjectRepo:
package be.italent.repo;
import be.italent.model.Project;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ProjectRepo extends JpaRepository<Project, Integer> {
}
ProjectService:
package be.italent.services;
import be.italent.model.Project;
import be.italent.repo.ProjectRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ProjectService {
@Autowired
private ProjectRepo projectRepo;
public List<Project> getAllProjects() {
return projectRepo.findAll();
}
}
ProjectRestController:
package be.italent.controllers;
import java.util.ArrayList;
import be.italent.services.ProjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import be.italent.model.Project;
@RestController
@RequestMapping("/projects")
public class ProjectRestController {
@Autowired
private ProjectService projectService;
@RequestMapping(method = RequestMethod.GET, produces="application/json")
public ArrayList<Project> getProjects(){
ArrayList<Project> c = (ArrayList<Project>) projectService.getAllProjects();
return c;
}
}
spring-mvc.xml
...
<context:component-scan base-package="be.italent"></context:component-scan>
...
Erreur:
GRAVE: l'Exception de l'envoi de contexte initialisé événement à l'auditeur instance de la classe org.springframework.web.contexte.ContextLoaderListener
org.springframework.les haricots.usine.BeanCreationException: Erreur lors de la création de haricots avec le nom "projectRestController': Injection de autocâblés dépendances a échoué; nested exception est org.springframework.les haricots.usine.BeanCreationException: ne Peut pas autowire domaine: privé-être.italent.services.ProjectService être.italent.les contrôleurs.ProjectRestController.projectService; nested exception est org.springframework.les haricots.usine.BeanCreationException: Erreur lors de la création de haricots avec le nom "projectService': Injection de autocâblés dépendances a échoué; nested exception est org.springframework.les haricots.usine.BeanCreationException: ne Peut pas autowire domaine: privé-être.italent.repo.ProjectRepo être.italent.services.ProjectService.projectRepo; nested exception est org.springframework.les haricots.usine.NoSuchBeanDefinitionException: Pas de qualification bean de type [- être.italent.repo.ProjectRepo] trouvé pour la dépendance: attendre au moins 1 fève qui se qualifie comme autowire candidat à cette dépendance. La dépendance des annotations: {@org.springframework.les haricots.usine.annotation.Autocâblés(required=true)}
au org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
au org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
au org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
au org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
au org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
au org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
au org.springframework.les haricots.usine.de soutien.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
au org.springframework.les haricots.usine.de soutien.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
au org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
au org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
au org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
au org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationcontext(ContextLoader.java:403)
au org.springframework.web.contexte.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
au org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
au org.apache.catalina.de base.StandardContext.listenerStart(StandardContext.java:5068)
au org.apache.catalina.de base.StandardContext.startInternal(StandardContext.java:5584)
au org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
au org.apache.catalina.de base.ContainerBase$StartChild.appel(ContainerBase.java:1572)
au org.apache.catalina.de base.ContainerBase$StartChild.appel(ContainerBase.java:1562)
à java.util.de façon concomitante.FutureTask.exécuter(FutureTask.java:266)
à java.util.de façon concomitante.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
à java.util.de façon concomitante.ThreadPoolExecutor$Travailleur.exécuter(ThreadPoolExecutor.java:617)
à java.lang.Fil de discussion.exécution(Thread.java:745)
Causés par: org.springframework.les haricots.usine.BeanCreationException: ne Peut pas autowire domaine: privé-être.italent.services.ProjectService être.italent.les contrôleurs.ProjectRestController.projectService; nested exception est org.springframework.les haricots.usine.BeanCreationException: Erreur lors de la création de haricots avec le nom "projectService': Injection de autocâblés dépendances a échoué; nested exception est org.springframework.les haricots.usine.BeanCreationException: ne Peut pas autowire domaine: privé-être.italent.repo.ProjectRepo être.italent.services.ProjectService.projectRepo; nested exception est org.springframework.les haricots.usine.NoSuchBeanDefinitionException: Pas de qualification bean de type [- être.italent.repo.ProjectRepo] trouvé pour la dépendance: attendre au moins 1 fève qui se qualifie comme autowire candidat à cette dépendance. La dépendance des annotations: {@org.springframework.les haricots.usine.annotation.Autocâblés(required=true)}
au org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
au org.springframework.les haricots.usine.annotation.InjectionMetadata.injecter(InjectionMetadata.java:87)
au org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
22 de plus ...
Causés par: org.springframework.les haricots.usine.BeanCreationException: Erreur lors de la création de haricots avec le nom "projectService': Injection de autocâblés dépendances a échoué; nested exception est org.springframework.les haricots.usine.BeanCreationException: ne Peut pas autowire domaine: privé-être.italent.repo.ProjectRepo être.italent.services.ProjectService.projectRepo; nested exception est org.springframework.les haricots.usine.NoSuchBeanDefinitionException: Pas de qualification bean de type [- être.italent.repo.ProjectRepo] trouvé pour la dépendance: attendre au moins 1 fève qui se qualifie comme autowire candidat à cette dépendance. La dépendance des annotations: {@org.springframework.les haricots.usine.annotation.Autocâblés(required=true)}
au org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
au org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
au org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
au org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
au org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
au org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
au org.springframework.les haricots.usine.de soutien.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
au org.springframework.les haricots.usine.de soutien.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
au org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1014)
au org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:957)
au org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:855)
au org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
... 24 plus
Causés par: org.springframework.les haricots.usine.BeanCreationException: ne Peut pas autowire domaine: privé-être.italent.repo.ProjectRepo être.italent.services.ProjectService.projectRepo; nested exception est org.springframework.les haricots.usine.NoSuchBeanDefinitionException: Pas de qualification bean de type [- être.italent.repo.ProjectRepo] trouvé pour la dépendance: attendre au moins 1 fève qui se qualifie comme autowire candidat à cette dépendance. La dépendance des annotations: {@org.springframework.les haricots.usine.annotation.Autocâblés(required=true)}
au org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
au org.springframework.les haricots.usine.annotation.InjectionMetadata.injecter(InjectionMetadata.java:87)
au org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
... 35 plus
Causés par: org.springframework.les haricots.usine.NoSuchBeanDefinitionException: Pas de qualification bean de type [- être.italent.repo.ProjectRepo] trouvé pour la dépendance: attendre au moins 1 fève qui se qualifie comme autowire candidat à cette dépendance. La dépendance des annotations: {@org.springframework.les haricots.usine.annotation.Autocâblés(required=true)}
au org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1100)
au org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
au org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:855)
au org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
... 37 plus
De l'aide? Merci!
Solution
Ajouté ça à mon spring-mvc.xml:
<beans
...
jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
...
<jpa:repositories base-package="be.italent.repo" entity-manager-factory-ref="emf"/>
Vous devez vous connecter pour publier un commentaire.
Quand quelque chose est mal lors de l'initialisation du contexte de l'application, le Printemps donne souvent à ces longues traces de pile. Habituellement, vous pouvez découvrir ce que la cause ultime est de regarder le bas de la trace de la pile.
Dans votre cas vous voyez ce message d'erreur en bas:
Cela signifie que le Printemps ne peut pas trouver un bean de type
ProjectRepo
.Votre
ProjectRepo
référentiel de l'interface est dans le paquetbe.italent.repo
, qui est un sous-paquetage debe.italent
, qui est une composante scannés, donc le problème n'est pas qu'il est dans un mauvais package.Avez-vous oublié d'activer Spring Data JPA?
Lorsque vous utilisez de configuration XML (comme vous le faites maintenant), vous devez avoir un
repositories
balise XML dans votre fichier de configuration:Lorsque vous utilisez JavaConfig, vous pouvez le faire avec une annotation: