web-dev-qa-db-fra.com

Aucun haricot correspondant de type ... trouvé pour la dépendance

après quelques jours d'essayer d'attendre les réponses sur les forums de springsource, je vais l'essayer ici. L'exécution de mon application entraîne ces exceptions:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.example.my.services.user.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.Java:924)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.Java:793)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.Java:707)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.Java:478)
    org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.Java:87)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.Java:284)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.Java:1106)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:517)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:456)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:294)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:225)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:291)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:193)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.Java:585)
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:913)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:464)
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.Java:631)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.Java:588)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.Java:645)
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.Java:508)
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.Java:449)
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.Java:133)
    javax.servlet.GenericServlet.init(GenericServlet.Java:212)
    org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)
    org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:293)
    org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:859)
    org.Apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.Java:602)
    org.Apache.Tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.Java:489)
    Java.lang.Thread.run(Thread.Java:662)

Voici le code pertinent

contexte d'application:

<bean id="dataSource" class="org.Apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="org.postgresql.Driver" />
  <property name="url" value="jdbc:postgresql://localhost:5432/test" />
  <property name="username" value="test" />
  <property name="password" value="test" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="packagesToScan" value="com.example.my.entities.*" />
  <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  <property name="hibernateProperties">
    <props>
      <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
      <prop key="hibernate.show_sql">true</prop>
    </props>
  </property>
</bean>

<tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>

com.example.my.entities.user:

@Entity
@Table( name = "tbl_users" )
public class User
{
  @Id
  @Column( name = "id" )
  @GeneratedValue
  private int id;

  @Column( name = "username" )
  private String username;

  @Column( name = "password" )
  private String password;

  public void setId( int id )
  {
    this.id = id;
  }

  public int getId()
  {
    return id;
  }

  public void setUsername( String username )
  {
    this.username = username;
  }

  public String getUsername()
  {
    return username;
  }

  public void setPassword( String password )
  {
    this.password = password;
  }

  public String getPassword()
  {
    return password;
  }
}

un service:

@Service
public class UserServiceImpl implements UserService
{
  @Autowired
  private UserDAO userDAO;

  @Override
  @Transactional
  public void addUser( User user )
  {
    userDAO.addUser( user );
  }

  @Override
  @Transactional
  public List<User> listUsers()
  {
    return userDAO.listUsers();
  }

  @Override
  @Transactional
  public void removeUser( int id )
  {
    userDAO.removeUser( id );
  }
}
57
dtrunk

Cela peut être provoqué par plusieurs facteurs, je n'ai pas pris la peine de consulter l'ensemble de votre référentiel, je ne suis donc pas très sérieux.

Tout d’abord, il se peut qu’il manque une annotation (@Service ou @Component) dans l’implémentation de com.example.my.services.user.UserService, si vous utilisez des annotations pour la configuration. Si vous utilisez (uniquement) xml, il vous manque probablement le <bean> _ définition pour la mise en œuvre UserService.

Si vous utilisez des annotations et que l'implémentation est correctement annotée, vérifiez que le package contenant l'implémentation est analysé (vérifiez votre <context:component-scan base-package= -valeur).

118
esaj

Ajoutez ceci à votre applicationContext:

 <bean id="userService" class="com.example.my.services.user.UserServiceImpl ">
13
Michael W

Ajoutez une annotation @Repository à la tête de userDao Class.Si userDao est une interface, ajoutez cette annotation aux implémentations de l'interface.

10
robinwen

J'ai des problèmes similaires dans la configuration de test, à cause de l'utilisation d'AOP. J'ai ajouté cette ligne de code dans spring-config.xml

<aop:config proxy-target-class="true"/>

Et il fonctionne !

6
abkvandrd

SI cela ne se produit que lors de déploiements, assurez-vous de disposer de la dépendance du package que vous référencez dans le fichier .war. Par exemple, cela fonctionnait localement sur ma machine, avec des configurations de débogage fonctionnant correctement, mais après le déploiement sur Elastic Beanstalk d'Amazon, j'ai reçu cette erreur et j'ai remarqué qu'une des dépendances n'était pas fournie dans le package .war.

1
mytwocents

J'ai eu un problème similaire mais il me manquait le (@Service ou @Component) de l'implémentation de com.example.my.services.myUser.MyUserServiceImpl

1
sreeprasad

Dans mon cas, c'était la mauvaise dépendance pour CrudRepository. Mon IDE ajouté également après:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons</artifactId>
        <version>1.11.2.RELEASE</version>
    </dependency>

Mais j'avais juste besoin de:

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

J'ai enlevé le premier et tout allait bien.

1
DOUBL3P

J'avais le même problème, mais dans mon cas, la classe implémentée était accidentellement devenue "abstraite", car le câblage automatique échouait.

0
Vinod Kumar