No matching bean of type ... found for dependency

236,618

Solution 1

Multiple things can cause this, I didn't bother to check your entire repository, so I'm going out on a limb here.

First off, you could be missing an annotation (@Service or @Component) from the implementation of com.example.my.services.user.UserService, if you're using annotations for configuration. If you're using (only) xml, you're probably missing the <bean> -definition for the UserService-implementation.

If you're using annotations and the implementation is annotated correctly, check that the package where the implementation is located in is scanned (check your <context:component-scan base-package= -value).

Solution 2

Add this to you applicationContext:

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

Solution 3

Add annotation @Repository to the head of userDao Class.If userDao is a interface,add this annotation to the implements of the interface.

Solution 4

I have similar trouble in test config, because of using AOP. I added this line of code in spring-config.xml

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

And it works !

Solution 5

I had a similar issue but I was missing the (@Service or @Component) from the implementation of com.example.my.services.myUser.MyUserServiceImpl

Share:
236,618
dtrunk
Author by

dtrunk

Updated on July 08, 2022

Comments

  • dtrunk
    dtrunk almost 2 years

    after some days of trying and waitin' for answers on the springsource forums I'll try it here. Running my application results in these exception:

    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)
    

    Here's the relevant code

    application context:

    <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;
      }
    }
    

    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 );
      }
    }