【问题标题】:No matching bean of type ... found for dependency没有匹配类型的 bean ... 找到依赖项
【发布时间】:2012-02-16 04:35:10
【问题描述】:

经过几天的尝试并在 springsource 论坛上等待答案后,我将在这里尝试。 运行我的应用程序会导致以下异常:

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)

这是相关代码

应用上下文:

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

【问题讨论】:

  • 我们还需要查看 servlet Spring 配置。

标签: java spring hibernate spring-mvc autowired


【解决方案1】:

很多事情都可能导致这种情况,我没有费心检查你的整个存储库,所以我在这里冒险。

首先,如果您使用注解进行配置,您可能会在 com.example.my.services.user.UserService 的实现中缺少注解(@Service 或 @Component)。如果您正在使用(仅)xml,您可能缺少 UserService 实现的 &lt;bean&gt; -定义。

如果你使用注解并且实现被正确注解,检查实现所在的包是否被扫描(检查你的&lt;context:component-scan base-package=-value)。

【讨论】:

  • 谢谢,这对我帮助很大!我的基本包是 com.example.my.web.controller 因为我认为我只需要控制器的路径。更改为 com.example.my 以涵盖所有需要的类(dao、服务、实体、控制器)并且效果很好!哦,我已经将会话工厂类更改为 org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 并删除了 configurationClass 属性。
  • 在我的情况下,接口存在但实现类丢失。使用@service 添加了该类并解决了问题。谢谢。
  • 其实就是包名。
【解决方案2】:

将此添加到您的应用程序上下文中:

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

【讨论】:

  • 也谢谢,因为您的回答帮助我弄清楚它并没有涵盖我所有的课程。
【解决方案3】:

在userDao类的头部添加注解@Repository。如果userDao是一个接口,在接口的实现中添加这个注解。

【讨论】:

    【解决方案4】:

    由于使用 AOP,我在测试配置中遇到了类似的问题。 我在spring-config.xml中添加了这行代码

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

    它有效!

    【讨论】:

      【解决方案5】:

      我遇到了类似的问题,但我在 com.example.my.services.myUser.MyUserServiceImpl 的实现中缺少(@Service 或 @Component)

      【讨论】:

        【解决方案6】:

        如果这仅发生在部署中,请确保您具有在 .war 中引用的包的依赖项。例如,这在我的机器上本地运行,调试配置运行良好,但在部署到 Amazon 的 Elastic Beanstalk 后,我收到此错误,并注意到其中一个依赖项未捆绑在 .war 包中。

        【讨论】:

        • 您能否建议如何将依赖项捆绑到 .war 中?
        【解决方案7】:

        在我的情况下,CrudRepository 的依赖是错误的。我的 IDE 还添加了以下内容:

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

        但我只需要:

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

        我删除了第一个,一切都很好。

        【讨论】:

          【解决方案8】:

          我遇到了同样的问题,但在我的情况下,实现的类意外地变成了“抽象”,结果自动装配失败。

          【讨论】:

            猜你喜欢
            • 2013-03-19
            • 2012-10-16
            • 1970-01-01
            • 2023-03-05
            • 2016-08-15
            • 1970-01-01
            • 2015-01-29
            • 2016-12-31
            • 2018-12-02
            相关资源
            最近更新 更多